Sospetto che sia probabilmente solo per ragioni storiche.
La risposta di BlueBomber è probabilmente storicamente corretta, ma in realtà non è necessaria affinché gli oggetti condivisi siano eseguibili.
Sul mio sistema Ubuntu, non lo sono. Dei 30 /lib/*.so*
e 600 /usr/lib/*.so*
file, solo uno ha i permessi di esecuzione, e questo è probabilmente solo un problema tecnico.
Il permesso di esecuzione consente l'esecuzione di un file tramite uno dei exec*()
funzioni; i file di oggetti condivisi contengono codice eseguibile, ma non vengono eseguiti in questo modo.
D'altra parte, su un sistema CentOS 5.7 a cui ho accesso, quei file sono eseguibile; lo stesso vale per un sistema SPARC Solaris 9. (Sarebbe interessante provare a disattivare i permessi eseguibili su alcuni di quei file per vedere se si rompe qualcosa, ma non sono in grado di farlo.)
(Quale distribuzione Linux stai usando?)
AGGIORNAMENTO:
Questa risposta a questa domanda mostra un esempio (HP-UX) di un sistema in cui il bit di esecuzione è effettivamente richiesto. Questo non sembra essere il caso di Linux, dove alcune distribuzioni impostano il bit di esecuzione (probabilmente per inerzia storica) e altre no. O forse alcuni Linux lo richiedono effettivamente.
Un altro punto dati:sul mio sistema Ubuntu, ho appena provato a creare il mio file oggetto condiviso. Il file "libfoo.so" generato è stato creato con i permessi di esecuzione, ma se eseguo manualmente chmod -x
it, il programma che lo utilizza funziona ancora.
In ogni caso, impostando il permesso di esecuzione su *.so
files è per lo più innocuo (e certamente meno fastidioso rispetto, ad esempio, all'impostazione dell'autorizzazione di esecuzione sui file sorgente).
AGGIORNAMENTO 2:
Come sottolinea fwyzard in un commento, alcuni *.so
i file possono essere effettivamente eseguiti. Ad esempio, sul mio sistema attuale, eseguendo /lib/x86_64-linux-gnu/libc-2.27.so
stampa le informazioni sulla versione per la libreria GNU C. /lib/x86_64-linux-gnu/libpthread-2.27.so
si comporta in modo simile.