Все ли команды Unix были переписаны в Linux?

Ответы:

93

Похоже, вы путаете две совершенно разные части ОС. Это понятно, потому что их часто называют взаимозаменяемыми, но это технически неверно, поэтому ваш вопрос основан на ошибочной предпосылке. Чтобы в полной мере изучить и, надеюсь, ответить на вопрос, который вы, вероятно, захотите задать, необходим короткий урок истории.

Во-первых, был UNIX. По сути, в те времена под UNIX подразумевалась система AT & T UNIX , которая появилась первой. Но AT & T UNIX стала несвободной, поэтому Ричард Столлман начал проект GNU, чтобы написать систему Unix, которая была бы бесплатной . Следовательно, имя Gnu - это не Unix , сокращенно GNU. Планы GNU были обнародованы в 1983 году, а разработка началась в 1984 году .

К началу 1990-х годов GNU переопределил большинство утилит UNIX с нуля. В Википедии перечислены некоторые компоненты всей системы, которые не были переписаны (TeX, X Window System и микроядро Mach упоминаются в качестве примеров компонентов, которые не были переписаны), но в основном инструменты пользовательского интерфейса были переписаны с нуля, чтобы соответствовать цель избежать повторного использования любого AT & T (или, скорее, несвободного) кода, а также расширить их возможности путем добавления параметров командной строки. В результате утилиты GNU регулярно оказывались более мощными, чем инструменты, из которых они черпали свое первоначальное вдохновение.

В тот момент, GNU еще отсутствует один из важнейших компонентов: письмо на ядро операционной системы , которая позволила бы все вместе работать над фактической компьютер не работает какой - либо другой ОС. В 1991 году Линус Торвальдс начал работать над игрушечным проектом, который в итоге стал известен как Linux. По сути, это был школьный проект, посвященный изучению нового 32-разрядного процессора Intel 80386 , который изначально был очень простым, но в итоге начал превращаться в реально используемое ядро ​​операционной системы. Но у него не было никакого пользовательского программного обеспечения; Linux сам по себе не предоставляет ни оболочки, ни средств запуска системы, кроме инициализации ядра, ни текстового редактора, ни графического интерфейса, ничего, Ядро похоже на автомобильный двигатель; необходимо сделать полезный автомобиль, но сам по себе бесполезен (для полезного автомобиля вам нужны такие вещи, как колеса, трансмиссия, рулевое управление, место для сидения водителя, топливный бак или другой запас энергии и т. д.). Ядро Linux в конечном итоге было распространено по Стандартной общественной лицензии GNU, так же, как и программное обеспечение GNU .

Таким образом, люди начали соединять два. Вы получите Unix-подобную пользовательскую среду вместе с ядром, основанным на идеях Unix (включая близкое сходство с POSIX ), в комплекте с исходным кодом, который вы можете взломать сколько угодно, и это ничего не стоит , Особенно до того, как дистрибутивы Linux стали обычным явлением, потребовалось немало усилий , чтобы заставить их работать, но он был достаточно закончен, чтобы его могли использовать те, кто хотел потратить на это некоторое время.

В наши дни GNU предоставляет собственное ядро. Вы, вероятно, не слышали об этом, но это называется GNU Hurd . Но Херда не было в начале 1990-х, когда Linux начал набирать популярность среди любителей и тинкеров, поэтому наибольшее внимание среди разработчиков привлекло сочетание ядра Linux и пользовательской среды, в основном GNU.

Кроме того, в наши дни многие системы Unix устанавливают или позволяют администратору легко устанавливать части пользовательского пространства GNU. Вы можете увидеть такие вещи, как GNU bash, Коллекция компиляторов GNU, библиотека GNU C (ванильная или исправленная) и т. Д. В системе, не являющейся GNU.

Что еще хуже, некоторые системы используют ядро ​​Linux, но вообще не имеют пользовательского пространства GNU. Для широко используемого примера рассмотрим ОС Android , которая в основном представляет собой ядро ​​Linux в сочетании с пользовательским пользовательским пространством.

Это важно, потому что это значительно стирает грань между GNU, Linux и различными Unixes ( есть только одна UNIX , но есть много Unixes и все же больше Unix-подобных ОС ). Когда вы спрашиваете о Linux, вы действительно очень часто спрашиваете о системе GNU / Linux. Но рассмотрим Debian GNU / kFreeBSD , который запускает пользовательское пространство GNU поверх ядра FreeBSD, а не использует Linux вообще. Или, например, Solaris, на котором вы можете легко установить различные пакеты GNU, включая, например, coreutils . Я думаю, что Mac OS X также поставляется с частями пользовательского пространства GNU. Или рассмотрите вышеупомянутый Android.

В конце концов, используемая система GNU может выполнять код не-GNU, а система не-GNU может выполнять код GNU, но утилиты GNU не содержат код не-GNU.

CVn
источник
1
В прошлый раз, когда я использовал FreeBSD (несколько лет назад), он использовал не много инструментов GNU, а свой собственный набор - например, BSD make вместо GNU make.
reinierpost
5
@reinierpost OSX очень похож - простая установка содержит в основном BSD-версии, но GNU coreutils и т.п. легко доступны через MacPorts и другие. XCode использует LLVM, но также и gcc. Это сложно :)
MattDMo
1
@reinierpost сделать не так уж плохо, чтобы заменить. C компилятор немного более вовлечен. По крайней мере, FreeBSD 8.0 использует GCC в качестве компилятора по умолчанию ; конкретно версия 4.2.1. «Лицензионные проблемы», связанные с предотвращением интеграции более новых версий в базовую систему, вероятно, связаны с переходом с GPL2 + на GPL3 +, но я не уверен, что уверен.
CVN
3
@ hunter2 Кажется, в этом нет необходимости, судя по подсчетам голосов. ;) Я тоже не собирался писать полную историю. Minix играл важную роль в качестве системы разработки и загрузки Linux до того, как Linux стал самостоятельным хостингом, но не имел большого влияния, например, на отношения между Linux, GNU и оригинальной UNIX, что больше соответствует сути вопроса.
CVN
3
@ hunter2 Если мы пойдем по этому пути, то совершенно верно, что UNIX, конечно, тоже не на первом месте. Но для ответа на вопрос это казалось достаточно хорошим приближением. Ответом в одном предложении было бы что-то вроде «в основном все UNIX, кроме TeX и X, которые вы найдете в системе Linux, были переписаны как часть GNU», но я думаю, что дополнительный контекст добавляет ценность, даже если он сделал ответ значительно длиннее, чем абсолютно необходимо - и ответ все еще далеки от охвата каждой детали.
CVN