No soy un experto en esto, pero he leído un poco para tratar de entender lo que está pasando.
Yo diría que "la confusión surge del hecho de que:
- la relación entre estos conceptos es compleja y
- ha cambiado con el tiempo y
- Apple ha implementado tanto las API a nivel de programa como las herramientas como ls o cp de tal manera que se ocultan muchas de las diferencias entre los conceptos."
AIUI, el archivo HFS+ Catalog contiene registros de archivos de catálogo (entre otras cosas). El Registro de Archivo de Catálogo contiene el tipo normal de información sobre el archivo, como la fecha de creación, la fecha de acceso, etc. El Registro de Archivo de Catálogo también contiene dos estructuras que dan información sobre la ubicación y el tamaño de la horquilla de datos y de la horquilla de recursos.
AIUI, HFS+ también tiene (copiado de Wikipedia HFS+) un "Archivo de Atributos [que] es un nuevo árbol B en HFS Plus que no tiene una estructura correspondiente en HFS. El archivo de atributos puede almacenar tres tipos diferentes de registros de 4 KB: Registros de atributos de datos en línea, registros de atributos de datos en horquilla y registros de atributos de extensión. Los registros de atributos de datos en línea almacenan pequeños atributos que pueden caber dentro del propio registro. Los registros de atributos de datos de bifurcación contienen referencias a un máximo de ocho extensiones que pueden contener atributos más grandes. Los atributos de extensión se utilizan para ampliar un registro de atributos de datos de bifurcación cuando ya se han utilizado sus ocho registros de extensión".
AIUI, los datos almacenados en (o referenciados desde) el archivo de atributos (ya sea en línea, datos de horquilla o atributos de extensión) se conocen como atributos extendidos.
Esas son las estructuras de datos, ¿cómo se utilizan?
AIUI, las primeras versiones del sistema operativo (posiblemente versiones anteriores a 10.4 Tiger, que John Siracusa parece indicar que hubo algunos cambios importantes en esta área), apuntó a la bifurcación de datos y a la bifurcación de recursos del archivo del Catálogo.
AIUI, una vez que llegamos a 10.4 Tiger, el Archivo de Atributos se convierte en algo muy utilizado para almacenar todo tipo de datos.
Es posible (pero no lo sé) que en 10.4 y posteriores, cualquier Bifurcación de Recursos sea señalada desde el Archivo de Atributos. Es decir, en respuesta a tu primera pregunta, yo diría que las bifurcaciones con nombre son Atributos Extendidos, a menos que sean la Bifurcación de Recursos, y la Bifurcación de Recursos sea referenciada desde el archivo de Catálogo.
El problema de saber cómo se implementan las cosas es que para preservar la compatibilidad hacia atrás, y probablemente en particular para soportar el acceso a los sistemas de archivos escritos por una versión de Mac OS desde otra versión, diferentes cosas y mezclas de cosas necesitan ser soportadas de forma transparente.
No podemos saber desde las herramientas normales de la línea de comandos de la Terminal dónde se guardan realmente los datos.
Así, el acceso a rsrc
podría sugerir que se está accediendo a la horquilla de recursos del archivo del catálogo.
$ ls -l Icon^M/rsrc
-rwxr-xr-x 1 root admin 486 23 Jul 2004 Icon?/rsrc
Sin embargo, sabemos que aunque la sintaxis parece un archivo debajo del Icon^M
se está accediendo al directorio, esto no es realmente el caso, porque
$ ls -lR Icon^M
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
por lo que Apple ha implementado un caso especial para los tenedores de recursos.
Si en cambio hacemos
$ ls -l@
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
com.apple.FinderInfo 32
com.apple.ResourceFork 486
Esto sugiere que estamos accediendo al Archivo de Atributos. Pero de nuevo, la implementación de ls
puede tener un caso especial para los tenedores de recursos.
John Siracusa señala aquí que las listas ACL se almacenan como "Atributos Extendidos", pero están especialmente enmascarados para que no se muestren en xattr
. Así que de nuevo hay un procesamiento de casos especiales en la implementación de xattr.
(Tenga en cuenta que este procesamiento de casos especiales puede estar en el código de la herramienta, o en el código de las APIs subyacentes a las que acceden las herramientas).
GregW, si ves esto, estaría bien tener una opinión más experta sobre si estoy en la línea correcta, o simplemente estoy irremediablemente confundido.