Toutes les commandes Unix ont-elles été réécrites sous Linux?

Réponses:

93

Il semble que vous confondiez deux parties très différentes du système d’exploitation. C'est compréhensible, car ils sont souvent interchangeables, mais c'est techniquement incorrect, votre question est donc basée sur une prémisse erronée. Afin d'explorer pleinement et, espérons-le, de répondre à la question que vous voudrez probablement poser, une courte leçon d'histoire est nécessaire.

D'abord, il y avait UNIX. À l'époque, à l'époque, UNIX désignait le système UNIX d'AT & T , qui est arrivé en premier. Mais AT & T UNIX étant devenu non-libre, Richard Stallman a donc lancé le projet GNU pour écrire un système Unix qui était libre . D'où le nom Gnu n'est pas Unix , en abrégé GNU. Les plans pour GNU ont été rendus publics en 1983 et le développement a commencé en 1984 .

Au début des années 1990, GNU avait réimplémenté la plupart des utilitaires UNIX à partir de zéro. Wikipedia répertorie quelques composants du système global qui n'ont pas été réécrits (TeX, le système X Window et le micro-noyau de Mach sont cités comme exemples de composants non réécrits), mais la plupart du temps, les outils utilisateur ont été réécrits à partir de rien afin de respecter l’objectif d’éviter la réutilisation de tout code AT & T (ou plutôt non codé), ainsi que de développer leurs capacités en ajoutant des options de ligne de commande. En conséquence, les utilitaires GNU étaient régulièrement plus puissants que les outils dont ils s'inspiraient.

À ce stade, il manquait encore à GNU un composant essentiel: un noyau de système d’exploitation , qui permettrait à tout de fonctionner ensemble sur un ordinateur réel ne fonctionnant pas sous un autre système d’exploitation. En 1991, Linus Torvalds a commencé à travailler sur un projet de jouet qui a fini par devenir connu sous le nom de Linux. Il s'agissait essentiellement d'un projet scolaire visant à découvrir le nouveau processeur Intel 80386 32 bits d'alors , et qui a débuté de manière extrêmement simple, mais a finalement commencé à se transformer en un noyau de système d'exploitation réellement utilisable. Mais il n'avait pas de logiciel utilisateur; Linux seul ne fournit aucun shell, aucune installation de démarrage système au-delà de l'initialisation du noyau, aucun éditeur de texte, aucune interface graphique, rien. Le noyau est comme un moteur de voiture; essentiel pour fabriquer une voiture utile, mais inutile par lui-même (pour une voiture utile, vous avez besoin de choses comme des roues, une transmission, une direction, un endroit où le conducteur peut s'asseoir, un réservoir de carburant ou une autre réserve d'énergie, etc.). Le noyau Linux a finalement été distribué sous la licence GNU General Public License, identique au logiciel GNU .

Alors les gens ont commencé à jumeler les deux. Vous obtiendrez un environnement utilisateur de type Unix, avec un noyau basé sur les idées d’Unix (y compris une ressemblance proche de POSIX ), avec un code source que vous pourriez modifier si vous le vouliez, et cela ne coûtait rien. . Avant que les distributions Linux ne deviennent courantes, il fallait un peu de bricolage pour que les choses fonctionnent, mais elles étaient suffisamment finies pour être utilisables par ceux qui étaient disposés à passer du temps dessus.

De nos jours, GNU fournit son propre noyau. Vous n'en avez probablement pas entendu parler, mais cela s'appelle GNU Hurd . Mais Hurd n'était pas là au début des années 1990, lorsque Linux a commencé à gagner du terrain auprès des amateurs et des bricoleurs. C'est donc la combinaison du noyau Linux et d'un environnement utilisateur principalement GNU qui a attiré le plus l'attention des développeurs.

De plus, de nos jours, de nombreux systèmes Unix installent, ou permettent à l'administrateur d'installer facilement, des parties du domaine utilisateur GNU. Vous verrez peut-être des objets tels que GNU bash, la collection de compilateurs GNU, la bibliothèque GNU C (vanille ou corrigée), etc., sur un système qui n’est par ailleurs pas GNU.

Pour aggraver les choses, certains systèmes utilisent le noyau Linux, mais pas du tout le monde utilisateur GNU. Pour un exemple largement utilisé, considérons Android OS , qui est essentiellement le noyau Linux associé à un environnement utilisateur personnalisé.

Ceci est important car cela brouille considérablement la ligne de démarcation entre GNU, Linux et les divers Unix ( il n’existe qu’un seul UNIX , mais il existe de nombreux Unix et d’autres OS similaires à Unix ). Lorsque vous parlez de Linux, vous parlez très souvent du système GNU / Linux. Mais considérons Debian GNU / kFreeBSD , qui exécute un environnement utilisateur GNU au-dessus du noyau FreeBSD, n’utilisant pas du tout Linux. Ou, par exemple, Solaris, sur lequel vous pouvez facilement installer divers packages GNU, notamment Coreutils . Je pense que Mac OS X est également livré avec des éléments de l’utilisateur GNU. Ou considérez l'Android mentionné ci-dessus.

En fin de compte, un système GNU utilisable peut exécuter du code non-GNU et un système non-GNU peut exécuter du code GNU, mais les utilitaires GNU ne contiennent pas de code non-GNU.

un CVn
la source
1
La dernière fois que j'ai utilisé FreeBSD (il y a des années), il n'utilisait pas beaucoup d'outils GNU, mais son propre jeu - par exemple, BSD make au lieu de GNU make.
reinierpost
5
@reinierpost OSX est très similaire - une installation standard contient principalement des versions BSD, mais GNU coreutils et autres sont facilement disponibles via MacPorts et d'autres. XCode utilise LLVM, mais aussi gcc. C'est compliqué :)
MattDMo
1
@reinierpost make est pas si mal à remplacer. Le compilateur C est un peu plus impliqué. Au moins FreeBSD 8.0 utilise GCC comme compilateur par défaut ; spécifiquement la version 4.2.1. Les "problèmes de licence" évoqués pour empêcher l'intégration de versions plus récentes dans le système de base concernent probablement le passage de GPL2 + à GPL3 +, mais je n'ai pas cherché à en être sûr.
un CVn
3
@ hunter2 Il semble que ce n'était pas nécessaire, selon le nombre de votes pris jusqu'à présent. ;) Je n'ai pas non plus entrepris d'écrire une histoire complète. Minix jouait un rôle important en tant que système de développement et de démarrage Linux avant que Linux ne devienne autonome, mais n'a eu que peu d'influence, par exemple sur la relation entre Linux, GNU et UNIX d'origine, ce qui est plutôt dans l'esprit de la question.
un CVn
3
@ hunter2 Si nous devions suivre cette voie, il est tout à fait vrai qu'UNIX n'est certainement pas arrivé en premier. Mais pour répondre à la question, cela semblait une approximation suffisante. La réponse en une seule phrase aurait ressemblé à "pratiquement tout ce qui est UNIX, à l'exception de TeX et X, que vous trouvez sur un système Linux, a été réécrit dans le cadre de GNU", mais je pense que le contexte supplémentaire ajoute de la valeur, même s'il a rendu la réponse beaucoup plus longue que nécessaire. nécessaire - et la réponse est encore loin de couvrir tous les détails.
un CVn