вторник, 30 септември 2008 г.

Различията между UNIX и Linux

Статията която предоставям на вниманието на любоопитните, отбили се тук е превод на материал написан от David Dougall. Далеч съм от претенците за перфектност, но искрено се надявам тя да е полезно и увлекателно четиво.

-------------------------------------------------------------------------

В настоящата статия се описват приликите и разликите между ОС UNIX® и Linux®. Мнозина считат, че Linux е UNIX-подобна операционна система, което не е точно така. Linux е ОС с отворен изходен код, в която са реализирани някои идеи и принципи присъщи на UNIX, но тя не е стопроцентов UNIX, както например Solaris, AIX®, HP-UX и др. Тази статия обхваща накратко различията между тях, от техническите – като поддръжката на ядрото и файловата система, до конкретни програми, достъпността им и методи за администриране.

Въведение

Историята на UNIX® започва през 1969 г. Повечето съвременни UNIX-системи са комерсиални и по същество версии на изходният код на UNIX. Solaris от Sun, HP-UX Hewlett-Packard, AIX® от IBM са най-добрите представители на UNIX, които, освен това имат свои уникални елементи и фундаментални решения. Например, Sun Solaris - е UNIX, но, освен това тя съдържа много инструменти и разширения, разработени специално с оглед работни станции и сървъри, произведени от Sun.
Linux® започва като опит да се създаде безплатна алтернатива на комерсиалните UNIX-среди. Началото му е в 1991,може да се каже дори през 1983 г., когато е създаден проекта GNU, чиято основополагаща идея е да се предостави безплатна алтернатива на UNIX. Linux работи на голямо количество платформи, например Intel®/AMD x86, PowerPC, докато повечето ОС UNIX са способни да работят само на една платформа.
Linux и UNIX имат общи корени, но имат и сериозни различия. Много от инструментите, програмите и безплатните приложения, стандартни за Linux, първоначално са замислени като безплатна алтернатива на програми от UNIX. Linux често предоставя поддръжка на опции и приложения, заимствайки ной-доброто или най-популярната функционалност от UNIX.
За администратори или програмисти, свикнали да работят с Linux, UNIX – системата може да се стори не много удобна за използуване. От друга страна, основата на UNIX-подобната ОС (инструменти, файлова система, API интерфейс) са достатъчно стандартизирани. Все пак някои детайли на системите могат да бъдат много различни. По нататък в статията ще бъдат разгледани някои от тези различия.

Технически различия

Разработчиците на комерсиалните дистрибуции на UNIX разчитат на определен кръг клиенти и сървърна платформа за операционната си система. За тях е много добре изяснено, каква точно поддръжка и оптимизацията на какви точно приложения е необходимо да бъдат осигурени. Производителите на UNIX правят всичко възможно за обезпечаване на съвместимост между различните версии. Освен това, имат подробно описани стандарти за своите ОС.
Разработката на GNU/Linux, от друга страна, не е ориентирана към конкретна платформа, клиентите и разработчиците му имат различен опит и възгледи, понякога силно различаващи се... В Linux-общността не съществуват стандартизиран набор от инструменти и среди. За да се преодолее това беше започнат проекта Linux Standards Base (LSB), но той не даде резултатите, които се очакваха. Поне досега...
Тази непълна стандартизация води до доста разминавания вътре, в самия Linux. За някои разработчици да се използуват най-добрите постижения на другите ОС e предимство, но не винаги е удобно да се копират такива UNIX елементи, като имена на устройствата взети, примерно от AIX, и инструменти за работа с файловата система от HP-UX. Несъвместимости от този род са чести и сред самите Linux дистрибуции. Например Gentoo и RedHat прилагат съвсем различни методи за обновления.
За сравнение – всяка нова версия на UNIX-системата излиза с много добре документирано описание на новите особености и изменения. Командите, инструментите и другите елементи рядко се променят, и често едни и същи аргументи на командния ред за приложенията остават непроменени в продължение на много версии. Когато се случват значителни изменения в тези елементи, разработчиците на комерсиалните UNIX-и често предоставят обвивка, необходима за обезпечаване на съвместимост с по-ранните версии на съответния инструмент.
Подобна съвместимост означава, че дадено приложение може да се използува в новите UNIX версии без проверка и изменения в кода на самата програма. Ето защо преходът към нова версия на UNIX, в която няма принципни различия от старата, за потребителите и администраторите на системата е свързан с много по-малко усилия, отколкото преходът от една на друга дистрибуция на Linux, понякога дори от една на друга версия на една и съща дистрибуция.

Архитектура на апаратното обезпечаване

Повечето комерсиални версии на UNIX са създадени само за една, или не голямо количество архитектури. HP-UX работи само на платформи PA-RISK и Itanium, Solaris – на SPARC и х86, а AIX е предназначен само за процесори POWER.
Благодарение на тези ограничения, UNIX-производителите могат относително свободно да модифицират кода на програмите специално за съответната архитектурата и да използуват максимално възможностите и преимуществата и. Доколкото много добре познават поддържаните от нея устройства, драйверите работят по-добре и не е необходимо да се отчитат ограниченията на BIOS, характерни за PC.
Linux,от друга страна, исторически е разработван с възможността да поддържа максимална съвместимост. Linux е достъпен за различни архитектури, а количеството на устройствата за вход/изход и всякаква друга периферия, която може да се използува с тази ОС е почти безгранично. Разработчиците не могат предварително да знаят на какво конкретно оборудване ще бъде инсталирана системата, и често, поради тази причина не могат да осигурят най-ефективното му използуване. Пример за това е, да кажем управлението на паметта в Linux. По-рано в Linux се е използувал сегментирания модел на паметта, първоначално разработван за х86 системите. Сега е адаптиран за използуване на страницирана памет, но все още пази някои изисквания към сегментираната памет, което води до проблеми, ако архитектурата не я поддържа [справка].
Това не е проблем за UNIX производителите – там съвсем точно се знае оборудването на което ще работи системата.

Ядрото

Ядрото е сърцевината на операционната система. Изходният код на ядрата на комерсиалните UNIX-и е собственост на разработчиците и не се разпространяват извън пределите на компанията. Напълно противоположна е ситуацията с Linux. Процесът на компилиране и редакция на ядрата и драйверите(модулите) е различен. За Linux и другите операционни системи с отворен код, поправките могат да бъдат пуснати, като изходен код и крайния потребител може да ги инсталира, провери, даже промени. Но тези поправки, обикновено не са толкова старателно проверени, както това би станало в една комерсиална UNIX система. Доколкото няма пълен списък на приложенията и средите, които трябва да се тестват за коректна работа в Linux, разработчиците зависят от крайните потребители и други разработчици, които биха поправили евентуална грешка.
Разработчиците на комерсиалните UNIX-и разпространяват ядрата само като изпълним код. Някои версии са монолитни, при други има възможност да се обновят само определени модули. Но винаги всичко се представя само като изпълним(двоичен) код. Ако е необходимо обновяване, администратора е длъжен да чака докато производителя разпространи поправка, отново само в двоичен код, но може да бъде спокоен, че това ще стане само след като е извършена много внимателна проверка за обратна съвместимост.
Всички комерсиални UNIX-и в голяма степен са еволюирали до модулни ядра. Драйверите и отделните елементи на ОС са достъпни като отделни компоненти и могат да бъдат при необходимост заредени, или извадени от ядрото. Но откритата модулна архитектура на Linux е значително по-гъвкава. От друга страна гъвкавостта и адаптивността означават и постоянно изменение. Изходния код на Linux постоянно се променя, и при желание от страна на разработчиците може да се промени и API. Когато един модул, или драйвер е написан за комерсиален UNIX, той ще бъде в употреба значително по-дълго време от същия за Linux.

Поддръжка на файловата система

Една от причините, поради която Linux стана достатъчно мощна ОС е широката съвместимост с останалите операционни системи. Една от най-очевидните особености – това е изобилието на поддържаните и достъпни файлови системи. Повечето комерсиални UNIX -и поддържат два, или три типа файлови системи. Linux, от своя страна поддържа повечето от съществуващите днес такива. В таблицата по-долу са показани какви файлови системи се поддържат от UNIX. Всяка от тях може да бъде монтирана в Linux, въпреки че не всички от тях се поддържат в пълния обем четене/запис на данни.

AIX - jfs, gpfs
HP-UX - hfs, vxfs
Solaris - ufs, zfs
Irix - xfs

Повечето от комерсиалните версии на UNIX поддържат журнални файлови системи. Например, HP-UX като стандартна файлова система използува hfs, но също така поддържа и журналната vxfs. Solaris поддържа ufs и zfs. Журналната файлова система е важен компонент на всяка сървърна среда за едно предприятие. В Linux поддръжката на такива файлови системи беше реализирана по-късно, но затова пък вече има няколко варианта – от клонове на комерсиалните системи (xfs, jfs) до специфичните за самия него (ext3, reiserfs).
Други особености на файловите системи са поддръжката на квоти, контрол на достъпа до файловете, огледално копиране, снимки на системата и динамични размери. В една, или друга форма всички те се поддържат от файловите системи на Linux. Някои на една, други изискват друга система, трети са просто недостъпни при определени условия, или изискват инсталиране на допълнителни инструменти, например определена версия на LVM или поддръжка на дискови масиви (software raid package). Исторически така се е получило, че в Linux съвместимостта на програмните интерфейси и стандартните инструменти се постига с труд, затова многото файлови системи постигат тези особености по различен начин.
Доколкото комерсиалните UNIX-и поддържат ограничено количество файлови системи, инструментите и методите им за работа с тях са стандартизирани в много голяма степен. Например, тъй като в Irix се поддържа само една главна файлова система, то има само един начин за задаване на контрол на достъпа. Това е значително по-удобно за крайния потребител и по-нататъшната поддръжка на тази ОС.


Достъпност на приложенията

Повечето основни приложения са еднакви в UNIX и Linux. Например командите cp, ls, vi и cc – те са много близки, дори и да не са напълно идентични. Версиите за Linux на тези инструменти са основани на GNU-версиите им, докато тези за UNIX са основани на традиционните такива. Те имат продължителна история и рядко са се променяли.
Всичко това не означава, че комерсиалните дистрибуции не могат да използуват GNU-инструменти. На практика много производители на комерсиални UNIX ОС ги включват, или ги предлагат като безплатно допълнение.
GNU-инструментите не са само стандартни средства, някои от тези безплатни приложения нямат комерсиални аналози (emacs или Perl). Повечето производители инсталират по подразбиране тези инструменти, или те са достъпни като допълнителни компоненти.
Безплатните приложения с открит изходен код почти винаги се вграждат във всички Linux дистрибуции. Съществува голямо количество безплатно програмно осигуряване, достъпно за Linux и много от тези приложения са пренесени на комерсиалните версии на UNIX.
Комерсиалните и/или такива със затворен код приложения (CAD, финансови програми, графични редактори) не винаги имат аналози в Linux. Въпреки, че някои производители пускат версии и за Linux, болшинството не бързат да правят това, преди системата да стане достатъчно популярна сред потребителите.
От друга страна, комерсиалните UNIX-и исторически имат поддръжка на голямо количество приложения на равнище предприятия, примерно Oracle или SAP. Linux много губи откъм съществуващата трудност за сертифициране на големите приложения, докато минималните промени от версия до версия в UNIX-ите правят този процес значително по лесен. В Linux може да има много разлики между две дистрибуции, не само – може да има много разлики и между две версии на една и съща дистрибуция. Всичко това води до значителна резервираност от страна на големите производители на ПО спрямо Linux – трудно е да се предвиди в каква точна среда ще работи съответното приложение.

Системно администриране

Въпреки, че някои Linux дистрибуции се разпространяват с набор от инструменти за управление на системата, например YAST на SUSE, не съществува общ за всички стандарт за инструментите за системно администриране. Достъпни са текстови файлове и приложения с команден ред, но понякога използуването им може да бъде неудобно. Всяка комерсиална UNIX система има свой собствен интерфейс за управление на системата. С негова помощ могат да бъдат управлявани и променяни всички елементи. По-надолу е даден пример с Мениджъра за системно администриране [System Administration Manager (SAM)] на HP-UX.
Въпросният SAM съдържа следните модули:
управление на потребители и групи;
управляеми елементи и параметри на ядрото;
настройка на мрежата;
настройка и инициализация на дисковото пространство;
конфигуриране на X-сървъра.

Качеството на този пакет от приложения е много високо, запазвайки много доброто двупосочно взаимодействие с текстовите файлове, намиращи се в сърцевината на всяка настройка на системата в UNIX. Аналог на този инструмент в Linux не съществува. Дори YAST на SUSE не притежава толкова изчистена функционалност.
Още един аспект в UNIX и Linux е доста различен, дори при Linux дистрибуциите се променя с почти всяка версия – разположението на алгоритмите за начална инициализация на системата. За щастие, /sbin/init и /etc/inittab са стандартни каталози. Но последователностите се намират на различни места. В таблицата по-долу са показани местата, където се съхраняват тези последователности за различните Linux-дистрибуции и UNIX-и.

HP-UX - /sbin/init.d
AIX - /etc/rc.d/init.d
Irix - /etc/init.d
Solaris - /etc/init.d
RedHat - /etc/rc.d/init.d
SUSE - /etc/rc.d/init.d
Debian - /etc/init.d
Slackware - /etc/rc.d

Поради наличието на много дистрибуции на Linux и неизброимо количество достъпни за тях приложения (отчитайки и различните версии на едно и също приложение, които се използуват едновременно), управлението им в Linux е доста сложна задача. Изборът на правилния инструмент зависи от това, с каква дистрибуция работите. Други неудобства създава и използуването на различни формати на инсталационните файлове на програмите – два примера - rpm (Redhat Package Manager), deb (в Debian и дериватите му) и пълната несъвместимост между тях. Такова разделение води до появата на огромно количество опции при работата с пакетите и не винаги е ясно каква система е удачно да се използува в конкретна среда.
От друга страна в UNIX има стандартни мениджъри на ПО (пакети). Въпреки, че съществуват различни версии на приложенията и специфични формати за различните версии на UNIX, средата за управлението на приложенията е неизменна. Примерно Solaris използува един и същ такъв инструмент от момента на създаването си. Не само – средствата за идентификация, инсталиране и премахване на програмни пакети в Solaris остават непроменени.
Производителите на комерсиалните UNIX-и доставят, освен това и средства за управление на хардуера, за който е предназначена съответната система, което до голяма степен улеснява внедряването на нови устройства, нещо което е много трудно да се направи в Linux. Примерно, в последните версии на Linux беше направен опит да се осъществи поддръжка на различните компоненти на системата, с възможност за „гореща подмяна на елементи“ (засега с променлив успех). Комерсиалните UNIX-и притежават такава възможност от дълго време. Освен това, пак при тях мониторинга върху апаратните средства е значително по-добър. Производителите могат да напишат драйвери и да ги внедрят в операционната система, от своя страна тя ще осъществи контрол на състоянието – примерно брой на грешките в паметта ECC, параметри на енергопотреблението, и който и да е друг компонент на хардуера. Поддръжка от този род в Linux засега няма, дори повече – тя е въпрос на далечното бъдещето.
Апаратната поддръжка в комерсиалните UNIX-и има, също така и по-усъвършенствувани опции на зареждане. Още преди да се зареди самата ОС, има възможност да се настроят прецизно протичащите при това процеси – да се провери работоспособността на системата, различни опции и режими на стартиращите се устройства. BIOS на стандартното PC има много малка част от тези възможности, или дори изобщо не ги притежава.

Поддръжка

Едно от най-големите различия между Linux и UNIX е в неговата цена. Компаниите разработващи UNIX-системите го продават на много висока цена, при това той може да се използува само с хардуера, продаван от същите компании. Дистрибуциите на Linux от друга страна струват евтино, или са напълно безплатни.
При закупуване на комерсиален UNIX производителите, обикновено предоставят и техническа поддръжка. Болшинството Linux потребители са лишени от такава. Те могат да получат само помощ по електронната поща, по форуми и различни общности на потребители. От друга страна тези групи не са предназначени само за потребителите на Linux. Много администратори на комерсиални UNIX – системи участвуват в тези открити групи за поддръжка, не само оказвайки помощ, но и получавайки такава в определени ситуации. Мнозина намират тази форма на взаимопомощ за по-полезна и ефективна от платената система за поддръжка.

Заключение

Основните неща в UNIX и Linux са много сходни. За потребителите и администраторите преходът от едната на другата система ще бъде съпроводен с някои неудобства, но като цяло би бил безболезнен. Дори при различни файлови системи и ядра, инструментите и API ще останат много сходни. В основни линии, различията няма да бъдат по-големи от тези между различните UNIX-и. Всички клонове на UNIX и дистрибуциите на Linux се развиват все повече и повече и разликите между тях ще стават все по-малко, но заради по-зрялата концепция на UNIX основните положения в ОС няма да се променят много.

Няма коментари:

Публикуване на коментар