Sospecho que probablemente sea solo por razones históricas.
La respuesta de BlueBomber probablemente sea históricamente correcta, pero en realidad no es necesaria para que los objetos compartidos sean ejecutables.
En mi sistema Ubuntu, no lo son. De los 30 /lib/*.so*
y 600 /usr/lib/*.so*
archivos, solo uno tiene permisos de ejecución, y eso probablemente sea solo un problema técnico.
El permiso de ejecución permite ejecutar un archivo a través de uno de los exec*()
funciones; los archivos de objetos compartidos contienen código ejecutable, pero no se ejecutan de esa manera.
Por otro lado, en un sistema CentOS 5.7 al que tengo acceso, esos archivos son ejecutable; lo mismo es cierto en un sistema SPARC Solaris 9. (Sería interesante intentar desactivar los permisos ejecutables en algunos de esos archivos para ver si se rompe algo, pero no puedo hacerlo).
(¿Qué distribución de Linux estás usando?)
ACTUALIZACIÓN:
Esta respuesta a esta pregunta muestra un ejemplo (HP-UX) de un sistema donde realmente se requiere el bit de ejecución. Ese no parece ser el caso en Linux, donde algunas distribuciones configuran el bit de ejecución (probablemente por inercia histórica) y otras no. O tal vez algunos Linux realmente lo requieran.
Otro punto de datos:en mi sistema Ubuntu, intenté crear mi propio archivo de objeto compartido. El archivo "libfoo.so" generado se creó con permisos de ejecución, pero si manualmente chmod -x
él, el programa que lo usa todavía funciona.
En cualquier caso, configurar el permiso de ejecución en *.so
Los archivos son en su mayoría inofensivos (y ciertamente menos molestos que, por ejemplo, configurar el permiso de ejecución en los archivos de origen).
ACTUALIZACIÓN 2:
Como señala fwyzard en un comentario, algunos *.so
los archivos realmente se pueden ejecutar. Por ejemplo, en mi sistema actual, ejecutando /lib/x86_64-linux-gnu/libc-2.27.so
imprime información de versión para la biblioteca GNU C. /lib/x86_64-linux-gnu/libpthread-2.27.so
se comporta de manera similar.