Mám podezření, že je to pravděpodobně jen z historických důvodů.
Odpověď BlueBomber je pravděpodobně historicky správná, ale ve skutečnosti není nutná aby sdílené objekty byly spustitelné.
Na mém systému Ubuntu nejsou. Z 30 /lib/*.so*
a 600 /usr/lib/*.so*
pouze jeden má oprávnění ke spuštění, a to je pravděpodobně jen závada.
Oprávnění k provedení povoluje spuštění souboru prostřednictvím jednoho z exec*()
funkce; soubory sdílených objektů obsahují spustitelný kód, ale tímto způsobem se nespouštějí.
Na druhou stranu v systému CentOS 5.7, ke kterému mám přístup, tyto soubory jsou spustitelný; totéž platí pro systém SPARC Solaris 9. (Bylo by zajímavé zkusit vypnout spustitelná oprávnění u některých z těchto souborů, abyste zjistili, zda to něco neporušuje, ale nejsem schopen to udělat.)
(Jakou distribuci Linuxu používáte?)
AKTUALIZACE:
Tato odpověď na tuto otázku ukazuje příklad (HP-UX) systému, kde je skutečně vyžadován prováděcí bit. To se nezdá být případem Linuxu, kde některé distribuce nastavují prováděcí bit (pravděpodobně z historické setrvačnosti) a jiné ne. Nebo to možná některé Linuxy skutečně vyžadují.
Další datový bod:Na mém systému Ubuntu jsem se právě pokusil vytvořit svůj vlastní sdílený objektový soubor. Vygenerovaný soubor "libfoo.so" byl vytvořen s oprávněním ke spuštění, ale pokud ručně chmod -x
program, který jej používá, stále funguje.
V každém případě nastavení oprávnění ke spuštění na *.so
soubory jsou většinou neškodné (a rozhodně méně otravné, řekněme nastavení oprávnění ke spouštění u zdrojových souborů).
AKTUALIZACE 2:
Jak upozorňuje fwyzard v komentáři, nějakých *.so
soubory lze skutečně spustit. Například v mém současném systému spouštění /lib/x86_64-linux-gnu/libc-2.27.so
vypíše informace o verzi knihovny GNU C. /lib/x86_64-linux-gnu/libpthread-2.27.so
se chová podobně.