3925Fermer3927
Kevin KoflerLe 10/03/2013 à 18:09
flanker (./3917) :
Bin les logiciels en question n'ont qu'à respecter la norme POSIX triso

Manque de chance, fork est spécifié par POSIX: http://pubs.opengroup.org/onlinepubs/009695399/functions/fork.html (et d'ailleurs, la révision de 2001 rajoute la phrase "After fork(), both the parent and the child processes shall be capable of executing independently before either one terminates." qui interdit fork=vfork, qui était encore toléré en 1998).

Le problème, c'est la clause: "Consequently, to avoid errors, the child process may only execute async-signal-safe operations until such time as one of the exec functions is called." à laquelle Apple rajoute "All APIs, including global data symbols, in any framework or library should be assumed to be unsafe after a fork() unless explicitly documented to be safe or async-signal safe. If you need to use these frameworks in the child process, you must exec." En gros, seul ce pour quoi POSIX exige que ce soit async-signal-safe l'est, toutes les APIs que OS X propose en dehors POSIX ne sont pas async-signal-safe! C'est "génial" quand tu dois utiliser une de leurs APIs non-standard pour intégrer ton application correctement à leur "UNIX, mais pas tout à fait".
Ce qu'il y a bien avec toi, c'est que tu considères que le standard à respecter est ce qui est ni un standard officiel (ISO), ni un truc utilisé sur la majorité des machines, mais bien un truc qui utilisé sur 1% des machines...

Le problème ici est que leur interprétation du standard POSIX n'est pas raisonnable, ils n'implémentent que le strict minimum pour être certifiables UNIX, toutes les options prévues pour un système desktop ne marchent pas et l'interopérabilité entre les APIs POSIX et leurs APIs propriétaires est pourrie (comme dans le cas présent)!