unixforum.org
вот вопрос есть вроде как я понял самостоятельная ОС Darwin включающая NEXTSTEP и mach kernel если я правильно все понял.
возник вопрос можно ли поставить OC Darwin на x86 и будет ли ето легально и встанет маковсий софт на ето платформу ?
M$ Windows для пользователей и геймеров
MacosX для дизайнеров и музыкантов
Linux для программистов и хакеров
*BSD для серверов
Спасибо сказали:
diesel Бывший модератор Сообщения: 5989 ОС: OS X, openSuSE, ROSA, Debian Контактная информация:
Re: Darwin OS
Сообщение diesel » 03.05.2010 14:08
03.05.2010 13:34
вот вопрос есть вроде как я понял самостоятельная ОС Darwin включающая NEXTSTEP и mach kernel если я правильно все понял.
Darwin — это открытая POSIX-совместимая операционная система, выпущенная Apple Inc. в 2000 году. Она совмещает код, написанный самой Apple, с полученным от NeXTSTEP, FreeBSD и прочих свободных проектов. Darwin представляет собой набор основных компонентов, используемых в Mac OS X и iPhone OS.
В яблочко! Краткий обзор ОС Darwin 7.0 на платформе X86 (MAC OS X 10.3 Jaguar)
К сожалению, графическая подсистема MacOSX (Quick Time, OpenGL, Quartz), пользовательский интерфейс (Aqua) не присутствуют в системе. Хотя и без них Darwin является уже полноценной ОС. Более подробно об истории возникновения Darwin см. [2].
Дискутировать относительно открытости продуктов самой фирмы Apple можно долго, однако нас в первую очередь должно волновать несколько моментов:
- списки совместимости с оборудованием (так называемые hardware compatibility list [3]);
- знание структуры *BSD-систем;
- потребность в использовании данной ОС в обучающем процессе на производстве.
Насчет первого пункта сильно огорчаться не следует, т.к. система стартует и работает на более-менее современной x86 машине. В общем-то, Intel Celeron 366, 128 Мб памяти должно хватить для ознакомления. Также следует обзавестись одной из следующих сетевых карт: 3Com 3c90x, Intel 8255x, Broadcom 570x, Realtek 8139, Dec 21×4 (она же Tulip). Встроенные сетевые карты, к сожалению, не поддерживаются. Видеокарта должна работать в VESA-режиме.
Для начала возьмем дистрибутив с сайта OpenDarwin [4]. Он из себя представляет упакованный gzip-образ, который потом надо записать на компакт-диск. Размер упакованного образа составляет 430 Мб.
wget -ct0 http://opendarwin.org/downloads/darwin-701.iso.gz
gzip -d darwin-701.iso.gz
cdrecord -v darwin-701.iso
Для дальнейшей работы потребуется пустой жесткий диск размером не более 2 Гб или такого же объема раздел.
Установленная система занимает примерно 1 Гб. Оставшееся место будем использовать для сборки необходимых пакетов.
Настраиваем загрузку с компакт-диска, и после определения оборудования ядром ОС мы увидим приглашение выбрать тот диск, на который хотим поставить операционную систему.
| «1) Auto-partition the disk (Destroys all disk contents)» «2) Manually partition the disk using fdisk» «3) Use existing partitions» |
Пункт 1 предназначен для установки на пустой диск. В случае, когда не надо иметь на диске несколько систем, выбирайте его. Пункт 3 предназначен для случая, когда место заранее выделено и размечено под операционную систему Darwin (ее идентификатор 0xA8, см. далее по тексту).
Если вам не подошли пункты 1 или 3, тогда вспоминаем, что настоящие герои всегда идут в обход и выбирают самый легкий путь. В целом разметка вручную не так и страшна, как кажется на первый взгляд.
Выбираем пункт 2. Для начала следует ознакомиться с командами fdisk данной системы.
Правильно, нажимаем слово «help» и читаем, что есть в меню. Команд немного, поэтому можно набирать не полную версию, а, например, сокращать до 2 начальных букв. То есть вместо «help» писать «he».
Команды прочитаны, пора выделить место под наше сегодняшнее яблочко. Распечатаем содержимое MBR диска, на который будем ставить ОС. Для этого подаем команду «print». Видим теперь, где находятся разделы и свободное место. Для редактирования свободного места подадим команду «edit ID», где ID – это номер раздела, предположим под номером 2 (то есть на текущем диске первичный раздел номер 2). Процедура выбора необходимого размера для нового раздела не составит, я надеюсь, особого труда. Отмечу, что размер считается в секторах, а не в килобайтах. Идентификатор файловой системы для Darwin имеет код 0xA8 (Darwin UFS).
Затем следует обновить информацию в MBR (Master Boot Record). Если вы ставите на чистый диск, то в MBR никакого загрузчика нет. Поэтому следует записать в него штатный, идущий в комплекте с OpenDarwin. В случае когда вы устанавливаете на отдельный раздел, все равно придется перезаписать MBR. В этом нет ничего страшного, т.к. дальше в статье разъясняется на примере LILO, как сделать загрузку нескольких операционных систем.
Для этих целей предусмотрена команда «update». После этого запишем в MBR непосредственно сведения о разделе, в котором будет жить наша «яблочная» операционная система. Сделаем это с помощью команды «write». Следует помнить, что в MBR записывается новый загрузчик, поэтому если у вас стоял LILO, GRUB или что-то аналогичное, то он будет просто-напросто переписан загрузчиком от Darwin. У меня используется LILO, поэтому я просто добавил в /etc/lilo.conf следующую строчку:
И запустив /sbin/lilo, перезаписываю MBR. Теперь при старте можно будет выбрать загрузку с раздела hdd2, где обитает OpenDarwin.
Всё. Выставим флаг активности раздела (команда «active ID», где ID – опять-таки нужный нам номер раздела). И завершим разметку подав команду «exit».
После этого осталось дождаться, чтобы установились пакеты, входящие в состав компакт-диска. Как говорится, возьмите чай, кофе – сахар по вкусу.
В ходе установки внимание обращает тот факт, что все пакеты находятся в упакованном виде. Сжаты они с помощью bzip2. После установки истинно «яблочных» пакетов, таких как AppleUSBAudio, следом идут пакеты с до боли знакомыми названиями. Согласитесь, что такие строчки, как apache-670tar.bz2, bind9-7tar.bz2, gcc-1495tar.bz2, вам о чем-то говорят. В этом нет ничего удивительного, т.к. система, как вы, наверное, слышали, базируется на BSD.
Большинство утилит, присутствующих в системе, хорошо знакомы людям, постоянно работающим в Open/Net/FreeBSD, да и тем, кто когда-либо занимался сборкой программ под UNIX.
Вернемся к нашему яблоку. Перегружаемся, не забываем вытащить из привода компакт-диск. Далее загрузка будет происходить с нашего жесткого диска.
Вот несколько интересных, на мой взгляд, строк, которые можно наблюдать при старте системы. Ваше аппаратное обеспечение отличается от моего, но по аналогии можете сами проследить отличия.
AppleSMBIOS: socketDesignation = SOCKET A
AppleSMBIOS: processorType = 0x3
AppleSMBIOS: processorFamily = 0x1
AppleSMBIOS: manufacturer = AuthenticAMD
AppleSMBIOS: processorVersion = AMD Athlon(TM) XP 1700+
AppleSMBIOS: voltage = 0x8e
AppleSMBIOS: externalClock = 0x85
AppleSMBIOS: maximumClock = 0x8ca
AppleSMBIOS: currentClock = 0x5ba
AppleGenericPCATADriver: Port 0x1f0, IRQ 14
AppleGenericPCATADriver: Port 0x170, IRQ 15
BSD root: disk1s2, major 14, minor 9
hfs_mount: invalid HFS+ sig 0x0000
Итак, строка externalClock = 0x85 означает, что шина работает на частоте 133 МГц (переведите цифры в десятичное представление). Строка currentClock = 0x5ba разъясняет, что текущая тактовая частота равна 1466 МГц, а максимальная частота для этого типа процессора равна 2250 МГц (maximumClock = 0x8ca).
Стоит разъяснить, откуда появляется надпись «hfs_ mount: invalid HFS+ sig 0x0000». Вы помните, когда мы ставили идентификатор раздела, то поставили 0xA8 (Darwin UFS). В связи с чем делаем вывод, что корневой раздел у нас отформатировался в UFS-формате. Ничего страшного, кроме досадного факта, что файловая система у нас получилась нежурналируемая. Для того чтобы корневая файловая система была в HFS+ формате, при начальной разметке диска следует ставить идентификатор 0xAF (вместо 0xA8). Перевести систему из UFS в HFS+ пока не представляется возможным.
Процесс загрузки ОС кардинально не отличается от процесса загрузки системы на FreeBSD. Знакомые конфигурационные файлы в /etc (rc, rc.boot, rc.common, fstab, syslog.conf и т. д.).
Итак, перед нами приглашение на вход в систему. Заходим под пользователем root (пароль изначально не установлен). Что необходимо сделать на этом этапе? Попробуем поднять сеть? Давайте сделаем!
| lo0: flags=8049 mtu 16384 inet6 ::1 prefixlen 128 inet6 fe80::1 prefixlen 64 scopeid 0x1 inet 127.0.0.1 netmask 0xff000000 gif0: flags=8010 mtu 1280 stf0: flags=0<> mtu 1280 en0: flags=8863 mtu 1500 ether 00:01:03:d1:f9:7c media: autoselect (100baseTX ) status: active supported media: 10baseT/UTP 10baseT/UTP autoselect 10 0baseTX 100baseTX |
Ага, вот и наша сетевая карта (интерфейс en0). Есть два пути – правильный и не очень правильный. Чтобы прописать в Darwin IP-адрес для интерфейса, в /etc/ надо создать файл iftab. Структура его следующая:
en0 inet 10.0.0.10 netmask 255.255.255.0 up
где 10.0.0.10 – IP-адрес, 255.255.255.0 – маска сети, «up» – интерфейс при загрузке поднять.
Стоит отметить, что файла /etc/rc.conf в Darwin просто нет. Поэтому вписать информацию о сетевых адресах по аналогии с FreeBSD не получится.
Так вот, правильный путь не работает. Поэтому либо пропишем в /etc/rc.common наш сетевой адрес (для этого найдите функцию CheckForNetwork() – в ее теле и надо прописать), либо идем в системный каталог автозагрузки. Его полный путь – /System/Library/StartupItems. Каталог, отвечающий за сеть, именуется Network.
Файл, который необходимо отредактировать, совпадает с названием каталога (его имя тоже Network). Обратите внимание, что на нем установлены биты на исполнение.
# Configure network interfaces and host name
ConsoleMessage «Initializing network»
ipconfig waitall > /dev/null 2>&1
sysctl -w net.inet6.ip6.auto_on=0 > /dev/null
sysctl -w net.inet.ip.forwarding=1 > /dev/null
sysctl -w net.inet.ip.forwarding=0 > /dev/null
ifconfig en0 10.0.0.10 netmask 255.255.255.0
Вот так выглядит файл Network на моей машине. Добавленная строка выделена красным цветом.
Небольшое уточнение, выясненное в ходе настройки. При переходе на новую систему не надо забывать, что структурно Darwin не отличается от FreeBSD или, скажем, Linux в плане загрузки модулей. Что я хочу этим сказать. Если у вас сетевая карта опознана, то Darwin подгрузит для нее модуль. Как только модуль подгружен, то можно выставлять IP-адрес и маску. В общем, если выставляете IP-адрес в один из rc-файлов, будьте внимательны.
Вставляйте строку после загрузки модулей ядра (они загружаются демоном kextd).
На этом этапе сеть у нас готова. Правда, развертка монитора может раздражать. Мы ведь работаем в VESA-режиме. Вертикальная развертка 60 Hz.
Давайте зададим текстовый режим консоли. Для этого редактируем файл /Library/Preferences/SystemConfiguration/com.apple.Boot.plist.
В оригинале он выглядит так.
Да, забыл сказать. Почти все конфигурационные файлы в Darwin хранятся в xml-формате. Что мы сейчас и видим.
Для текстового режима необходимо поменять параметр Boot Graphics с Yes на No. Со следующей загрузки будет использоваться текстовый режим.
Добавим теперь сервисы ftp, telnet. Редактируем файл /etc/inetd.conf, удаляем ненужные символы, ставим комментарии перед нужными нам службами.
Посылаем сигнал, чтобы демон inetd перечитал свои настройки.
killall -1 inetd
Отлично. Службы появились.
Теперь задумаемся, а может, нам еще нужен и веб-сервер? А DNS-сервер? Что ж, пробовать, так все и сразу.
Чтобы запускать указанные и некоторые другие службы, при старте Darwin существует файл /etc/hostconfig:
# This file is maintained by the system control panels
Если параметр установлен в -YES-, тогда при старте указанные службы будут запущены.
Запуском apache (строка WEBSERVER=-YES-) занимается файл /System/Library/StartupItems/Apache/Apache.
Для DNS-сервера выделен файл /System/Library/Startup Items/BIND/BIND. В целом прослеживается аналогия со структурой системных файлов, например, как в Linux Slackware. В последней скрипты, запускающие определенный сервис, называются /etc/rc.d/rc.ServiceName.
Строка MAILSERVER предназначена для почтовой службы postfix, TIMESYNC – для синхронизации времени, CUPS – для сервиса, отвечающего за печать, SMBSERVER – samba-сервис, добавим самостоятельно чуть позднее.
Картина вырисовывается следующая. Сначала отрабатываются файлы /etc/rc*, а затем – соответствующие файлы в /System/Library/StartupItems.
Чтобы запустить свой сервис, необходимо создать в /System/Library/StartupItems директорию с названием сервиса. В ней должны находиться: исполняемый файл, совпадающий с названием только что созданной директории и информационный файл StartupParameters.plist.
Давайте посмотрим, как создать скрипт сервиса, отвечающего за старт samba-сервера.
# Include system wide configuration options
# Start SMB services
ConsoleMessage «Starting SMB services»
Description = «smb file server»;
start = «Starting Samba»;
stop = «Stopping Samba»;
Вставляем в файл /etc/hostconfig строчку SMBSER-VER=-YES- и в дальнейшем надо будет выделить samba-ресурсы (файл /etc/smb.conf).
Так, со службами все понятно. Установим локальное время в системе.
ln -s /usr/share/zoneinfo/Europe/Moscow localtime
Для необходимого нам hostname следует подправить файл /etc/rc.boot. Вместо строки по умолчанию «hostname localhost» вставим «hostname DarwinOS».
Теперь мы рассмотрим концепцию NetInfo, реализованную в Darwin. Система может искать информацию как в файлах службы NetInfo, так и в «плоских» («plain text») файлах (/etc/fstab, /etc/passwd и др.).
Для добавления пользователя, существует утилита niutil (NetInfo Util). С помощью этой же утилиты настраивается большая часть системы.
niutil -create / /users/Bob
niutil -createprop / /users/Bob shell /bin/tcsh
niutil -createprop / /users/Bob realname UncleBob
niutil -createprop / /users/Bob home /Users/Bob
niutil -createprop / /users/Bob _shadow_passwd
Комментарии, надеюсь, излишни? Сначала мы создали объект Bob в иерархии /users, а затем добавили этому объекту свойства. Добавить добавили, но надо и создать ему домашний каталог.
chown -R Bob:wheel Bob
Теперь у Bob домашняя директория, да и сам он получился по умолчанию в группе wheel. Можно переделать, добавив через niutil пользователю uid и gid.
Для получения списка объектов в иерархии NetInfo выполним команду:
Получим список корневых иерархий. Для просмотра объекта resolver (аналог /etc/resolver):
niutil -read . /locations/resolver
Создадим запись в объекте resolver:
niutil -createprop . /locations/resolver nameserver 10.0.0.100
Всю базу NetInfo можно просмотреть:
nidump -r / / > nidump.txt
Приступаем к заключительной части нашей статьи. Готовимся к прыжку в окна X-сервера.
В Darwin он называется XDarwin (это портированный в Mac OS проект XFree86). В системе обнаруживается только один оконный менеджер. Это twm.
Для запуска twm создадим в домашней директории файл .xinitrc:
| /usr/X11R6/bin/xterm & /usr/X11R6/bin/twm |
Не забываем, что он должен иметь установленным исполняемый бит.
# chmod +x .xinitrc
А теперь в окна! То есть в X-сервер.
Как-то непривычно, не правда ли?
Давайте поменяем twm на другой менеджер. Например, blackbox. Сказано – сделано.
wget -ct0 http://prdownloads.sf.net/blackboxwm/blackbox-0.65.0.tar.gz
mv blackbox-0.65.0.tar.gz sources
tar xzvf blackbox-0.65.0.tar.gz
make && make install
echo “/usr/local/blackbox/bin/blackbox” > ~/.xinitrc
Теперь, как мне кажется, намного симпатичнее.
Большую часть приложений придется собирать из исходников. Кому нравится GNOME, нет проблем. Дело вкуса. Для любителей клубнички даже существует проект darwine, запуск windows-приложений под Darwin (небезызвестный родоначальник – проект wine).
Пару слов о модулях, упомянутых в начале статьи. Просмотр информации о загруженных модулях:
В списке я оставил упоминания модулей, названия которых отчасти говорят о платформе и используемом оборудовании.
- kextload kextName – загрузка модуля под именем kextName (они находятся в /System/Library/Extensions).
- kextunload kextName – соответственно выгрузка из памяти модуля kextName.
- kextxcache – подготовка базы модулей, хранящихся в /System/Library/Extensions.
Apache-сервер, которым комплектуется система, идентифицируется следующим образом:
sh-2.05b# telnet darwin 80
| Trying 10.0.0.10. Connected to darwin. Escape character is «^]». HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Sun, 23 May 2004 00:53:47 GMT Server: Apache/1.3.28 (Darwin) Content-Location: index.html.en Vary: negotiate,accept-language,accept-charset TCN: choice Last-Modified: Wed, 18 Jul 2001 23:44:21 GMT ETag: «37bce-5b0-3b561f55;3fa2d462» Accept-Ranges: bytes Content-Length: 1456 Connection: close Content-Type: text/html Content-Language: en Expires: Sun, 23 May 2004 00:53:47 GMT Connection closed by foreign host. |
Настройка ничем оригинальным не отличается.
Интересно, как же идентифицируется система со стороны. Сейчас поглядим. Заходим на удаленную машину. И оттуда запускаем наш сканер портов nmap.
# /usr/local/nmap/bin/nmap -v -sS -O darwin
Со стороны не отличишь, действительно ли это MacOSX на платформе PPC или x86. Жаль, что ни Aqua, ни Quartz не предусмотрены.
Посмотрим на samba-ресурсы удаленной машины.
DarwinOS:~ root# smbclient -L fuji -I fuji 2> /dev/null
Sharename Type Comment
——— —- ——-
Share Disk Share
Media Disk Music & Video Share
Software Disk Software Share
IPC$ IPC IPC Service (Samba Server)
ADMIN$ Disk IPC Service (Samba Server)
Anonymous login successful
Server Comment
——— ——-
FUJI Samba Server
Посмотрим на геометрию диска из-под ОС Darwin.
DarwinOS:~ root# fdisk /dev/rdisk1
| Disk: /dev/rdisk1 geometry: 779/128/63 [6281856 sectors] Signature: 0xAA55 Starting Ending #: id cyl hd sec — cyl hd sec [ start — size] ———————————————————————— 1: 06 0 1 1 — 68 127 63 [ 63 — 556353] DOS > 32MB *2: A8 69 0 1 — 576 127 63 [ 556416 — 4096512] Darwin UFS 3: 00 0 0 0 — 0 0 0 [ 0 — 0] unused 4: 00 0 0 0 — 0 0 0 [ 0 — 0] unused |
Наглядно и просто. Файловых систем не так уж и много.
| cd9660.fs cddafs.fs hfs.fs msdos.fs ntfs.fs ufs.fs |
Файловая система NTFS доступна только на чтение. Для монтирования файловой системы из-под Linux:
# mount /dev/hdd2 /mnt/hd -t ufs -o, ufstype=44bsd
На момент написания статьи поддержка из-под Linux только на чтение.
Напоследок пара строк о средстве фильтрации трафика. Конечно, это ipfw. Полностью похож на своего *BSD-собрата. Впрочем, это не собрат, а скомпилированный под Darwin оригинальный ipfw. Правила задаются и убираются абсолютно так же, как и в FreeBSD. Более подробно см. в статьях: «Ipfw и управление трафиком в FreeBSD» (№6 журнала «Системный администратор» за 2003 год), «Сам себе антихакер. Защита от хакерских атак с помощью ipfw» (№1 журнала «Системный администратор» за 2004 год).
В целом из машины на основе OpenDarwin вполне возможно сделать почтовый релей, систему доступа из Интернета по ppp-соединению, веб-сервер. Основные компоненты по созданию сетевой инфраструктуры уже присутствуют в системе: postfix, mysql, php, apache, bind, perl. Относительно сетевой безопасности – код стека TCP/IP, как говорилось в начале статьи, основан на оригинальном BSD-коде. Если каких-либо программ не хватает, то следует обратиться на сайт [7]. Вполне возможно, что эти программы уже портированы и доступны, как ports.
Несколько слов о компиляции программ под Darwin. В системе используется GNU Compiler Collection. Поэтому особых проблем при сборке возникнуть не должно. В Darwin я встретил такое понятие, как «толстые» файлы («fat»-files). То есть при сборке файлы компилируются под несколько архитектур, например, под PPC и под x86. И собираются в один бинарный файл. При выполнении файла происходит определение архитектуры и передается управление на необходимый участок кода. В частности, ядро, идущее с системой, собрано с поддержкой как PowerPC (PPC) архитектуры, так и x86.
Конечно же, статья не претендует на полное освещение всех нюансов «фруктовой» ОС. Она предназначена в первую очередь для тех, кто собирается расширить свой кругозор, и тех, кто неравнодушен к самой компании Apple Computer.
Мечты придуманы для того, чтобы из них делать реальность. И фруктовая компания не забывает об этом.
- http://developer.apple.com/darwin/history.html
- http://news.com.com/2100-1045_3-5103279.html
- http://www.opendarwin.org/hardware
- http://blackboxwm.sf.net
- http://www.opendarwin.org/documentation
- http://www.mymac.ru
- http://darwinports.opendarwin.org
- Потемкин А. Mac OS X или то, что должен знать каждый про Macintosh, Apple и операционные системы. – Журнал «Системный администратор», №7, июль, 2003 г. – 68-77 с. (http://samag.ru/archive/article/157)
Дарвин (операционная система) — Darwin (operating system)
Darwin — это открытый источник Unix-like операционная система, впервые выпущенная Apple. Inc. в 2000 году. Он состоит из кода, разработанного Apple, а также кода, производного от NeXTSTEP, BSD, Mach и других бесплатное программное обеспечение проектов.
Дарвин формирует основной набор компонентов, на основе которого macOS (ранее OS X и Mac OS X), iOS, watchOS, tvOS и iPadOS. Он в основном POSIX -совместим, но сам по себе никогда не был сертифицирован как совместимый с какой-либо версией POSIX. Начиная с Leopard, macOS сертифицирована как совместимая со спецификацией Single UNIX Specification версии 3 (SUSv3).
- 1 История
- 2 Дизайн
- 2.1 Ядро
- 2.2 Аппаратная и программная поддержка
- 5.1 OpenDarwin
- 5.2 PureDarwin
- 5.3 Другие производные проекты
История
Наследие Дарвина началось с операционной системы NeXT NeXTSTEP (позже, начиная с версии 4.0, известная как OPENSTEP), впервые выпущенная в 1989 году. После того, как Apple купила NeXT в 1997 году, она объявила, что будет основывать свою следующую операционную систему на OPENSTEP. Это было развито в Rhapsody в 1997 году, Mac OS X Server 1.0 в 1999 году, Mac OS X Public Beta в 2000 году и Mac OS X 10.0. в 2001 году.
В 1999 году Apple объявила о выпуске микроядра Mach 2.5, ОС BSD Unix 4.4 и компонентов веб-сервера Apache для Mac OS X Server. В то время исполняющий обязанности генерального директора Стив Джобс сослался на британца натуралиста Чарльза Дарвина, заявив, что «потому что речь идет об эволюции». В 2000 году основные компоненты операционной системы Mac OS X были выпущены как программное обеспечение с открытым исходным кодом под Apple Public Source License (APSL) как Darwin; компоненты более высокого уровня, такие как структуры Cocoa и Carbon, оставались закрытым исходным кодом.
. До Darwin 8.0.1 Apple выпустила двоичный установщик (как ISO-образ ) после каждого основного выпуска Mac OS X, который позволял устанавливать Darwin в системах PowerPC и Intel x86 в качестве отдельной операционной системы. Незначительные обновления были выпущены в виде пакетов, которые устанавливались отдельно. Darwin теперь доступен только как исходный код, за исключением варианта ARM, который не был выпущен ни в какой форме отдельно от iOS, watchOS или tvOS. Любитель-разработчик winocm взял официальный исходный код Darwin и перенес его на ARM.
Упрощенная история Unix-подобных операционных систем.
Дизайн
Схема архитектуры Mac OS X
Ядро
Ядро Darwin — это XNU, гибридное ядро , которое использует OSFMK 7.3 (Open Software Foundation Mach Kernel) из OSF, различные элементы FreeBSD (включая модель процесса, сетевой стек и виртуальную файловую систему ), а также объектно-ориентированный драйвер устройства API называется I / O Kit. Гибридный дизайн ядра обеспечивает гибкость микроядра и производительность монолитного ядра.
Аппаратная и программная поддержка
Darwin в настоящее время включает поддержку 64- бит x86-64 вариант процессоров Intel x86, используемых в Mac и 64-битных ARM, используемые в iPhone 5S, iPod Touch 6-го поколения, iPad Air, Apple TV четвертого поколения, оригинальные HomePod и более поздние модели, а также 32-битные процессоры ARM, используемые в iPhone 5C и более ранних, более ранних поколениях iPod Touch, iPad до четвертого поколения, а также Apple TV второго и третьего поколения. Существует порт с открытым исходным кодом для ядра XNU, который поддерживает Darwin на платформах Intel и AMD x86, официально не поддерживаемых Apple, хотя, похоже, он не обновлялся с 2009 года. Порт с открытым исходным кодом ядра XNU также существует для платформ ARM. Более старые версии поддерживали некоторые или все 32-битные PowerPC, 64-битные PowerPC и 32-битные x86.
Он поддерживает POSIX API посредством своей BSD родословной (в основном FreeBSD userland) и большого количества программ, написанных для различных других UNIX-подобные системы могут быть скомпилированы на Дарвине без изменений исходного кода .
Дарвин не включает многие определяющие элементы macOS, такие как Carbon и Cocoa API или пользовательский интерфейс Quartz Compositor и Aqua, и поэтому не могут запускать приложения Mac. Однако он поддерживает ряд менее известных функций macOS, таких как mDNSResponder, который является ответчиком multicast DNS и основным компонентом Bonjour сетевые технологии и launchd, расширенная структура управления услугами framework.
License
В июле 2003 года Apple выпустила Darwin под версией 2.0 документа Лицензия Apple Public Source License (APSL), которую Фонд свободного программного обеспечения (FSF) классифицирует как лицензию бесплатного программного обеспечения, несовместимую с Стандартной общественной лицензией GNU. Предыдущие версии были выпущены под более ранней версией лицензии APSL, которая не соответствовала определению бесплатного программного обеспечения FSF, хотя и соответствовала требованиям Определение открытого исходного кода.
История выпуска
Ниже приводится таблица основных выпусков Darwin с датами их выпуска и соответствующими выпусками macOS. Обратите внимание, что соответствующий выпуск macOS мог быть выпущен в другую дату; см. соответствующие даты на страницах macOS.
- Первоначальный выпуск
- 0.1 разработан (для сортировки и идентификации), поскольку он идентифицировал себя просто как Rhapsody 5.3
- ISO-образ доступен на archive.org
- После этого ядро изменилось с NeXTSTEP / OPENSTEP / Rhapsody на более новый XNU для Mac OS X
- образ ISO доступно на archive.org
- Первый коммерческий выпуск Darwin
- Все выпуски Cheetah (v10.0.0–4) имели Та же версия Darwin.
- Улучшение производительности для «загрузки» время, потоки реального времени, управление потоками, очистка кеша и обработка прерывания «
- Поддержка SMB сетевой файловой системы
- Wget заменена на cURL.
- Изменение схемы нумерации для соответствия схеме нумерации сборки Mac OS X
- GCC обновлен с 2 до 3.1
- IPv6 и IPSec support
- mDNSResponder сервис Discoveryдемон (Rendezvous )
- Добавление CUPS, Ruby и поддержка Python
- ведения журнала в HFS + (Darwin 6.2)
- Профили приложений («файлы предварительного нагрева») для более быстрого запуска программы.
- BSD уровень синхронизирован с FreeBSD 5
- Автоматическая дефрагментация файла , кластеризация горячих файлов и необязательная чувствительность к регистру в HFS +
- Bash вместо tcsh по умолчанию оболочка
- Только чтение Поддержка NTFS (Darwin 7.9)
- Mac OS X Tiger
- Mac OS X для Apple TV
- Mac OS X для Apple TV в Darwin 8.8.2
- Стабильное ядро , программный интерфейс, более тонкое ядро блокировка, 64-битный уровень BSD
- запущенуправление услугами структура
- Расширенные атрибуты файлов, списки управления доступом
- Команды, такие как cp и mv, обновлены до сохранить расширенные атрибуты и вилки ресурсов
- Mac OS X Leopard
- iPhone OS 1
- Поддержка iPhone OS 1 в Darwin 9.0.0d1
- Полная совместимость с POSIX, улучшенная иерархическая модель планирования процессов, динамически выделяемыефайлы подкачки, динамические ограничения ресурсов (для файлов и процессы ), процесс песочница, рандомизация разметки адресного пространства, DTraceтрассировка структура, файловая система демон событий, каталогжесткие ссылки
- Apache 1.3 и PHP 4 обновлены до Apache 2.2 и PHP 5, только для чтения Поддержка ZFS.
- Первое ядро Darwin, используемое для устройств iPhone.
- Mac OS X Snow Leopard
- iOS 4
- Окончание официальной поддержки архитектуры PPC (хотя несколько толстых двоичных файлов, таких как Kernel, все еще содержат изображения PPC)
- 64-битное ядро и dr ivers
- libdispatchраспараллеливание задач структура
- OpenCLгетерогенные вычисления структура
- Начальная поддержка автоматического подсчета ссылок
- Поддержка блоков в C
- Прозрачный сжатие файлов в HFS +.
- Mac OS X Lion
- iOS 5
- XNU больше не поддерживает PPC двоичные файлы (толстый двоичный файл только для i386, x86_64).
- XNU требует процессора x86_64, за исключением iOS, которая основана на ARM.
- Улучшенная песочница приложений
- Полная поддержка для Автоматический подсчет ссылок
- Mac OS X была переименована в OS X.
- Сборка мусора Objective-C устарела в пользу Автоматический подсчет ссылок
- OS X Mavericks
- iOS 6
- Сжатие виртуальной памяти
- Объединение таймера
- OpenGL 4.1 и OpenCL 1.2
- Блок сообщений сервера версия 2 ( SMB2) теперь протокол по умолчанию для обмена файлами вместо AFP. Это сделано для повышения производительности и кросс-платформенной совместимости.
- IPoTB (Интернет-протокол через Thunderbolt Bridge).
- API Open Transport был удалено
- OS X Yosemite
- iOS 7, iOS 8
- OS X El Capitan
- iOS 9
- Защита целостности системы. Защищает определенные части системы от изменения или вмешательства в процесс, даже если он запущен root или пользователем с привилегиями root.
- sudo по умолчанию настроен с флагом «tty_tickets», ограничивающим время ожидания сеанса до сеанс терминала (например, окно или вкладка), в котором пользователь аутентифицировал программу.
- LibreSSL заменяет OpenSSL
- macOS Sierra
- iOS 10
- OS X была переименована в macOS.
- Запись в каталог / Volumes теперь разрешена пользователю root или любому пользователю с правами root
- Защита целостности системы теперь охватывает каталог / Library / Application Support / com.apple.TCC , содержащий список приложений, которым разрешено «управлять компьютером»
- Objective-Cсборщик мусора удален и заменен на Автоматическая ссылка ence Counting, представленный в Darwin v12.0 (OS X v10.8). Приложения Objective-C, использующие сборку мусора, больше не будут работать.
- Встроенная поддержка PPTP была удалена.
- Изменена файловая система с HFS + на APFS на устройствах iOS. APFS уже доступна в macOS с 10.12.0, но не может использоваться в загрузочном разделе.
- macOS High Sierra
- iOS 11
- APFS заменяет HFS + в качестве файловой системы по умолчанию для загрузочного раздела в macOS на компьютерах Mac с флэш-памятью . На компьютерах Mac с жесткими дисками загрузочный раздел необходимо переформатировать для использования APFS.
- ntpd заменить на timed в качестве службы синхронизации времени
- FTP и telnet команды удалены.
- Расширения ядра («kexts») потребуют явного одобрения со стороны пользователя перед запуском.
- Поддержка внешних графических процессоров, использующих Thunderbolt 3, и отменена поддержка внешних графических процессоров, использующих Thunderbolt 1 и 2.
- macOS Mojave
- iOS 12
- Добавлена поддержка новых графических процессоров Radeon Vega 20 в новых MacBook
- macOS Catalina
- iOS 13
- Система Расширения заменяют Kexts и работают в пользовательском пространстве, вне ядра.
- заменяет комплект ввода / вывода ]. Он представляет «Dexts» (расширения драйверов), которые создаются с использованием DriverKit. Driverkit — это новый SDK со всеми новыми фреймворками, основанными на IOKit, но обновленный и модернизированный. Драйверы устройств запускаются в пользовательском пространстве вне ядра.
- macOS Big Sur
- iOS 14
- macOS Big Sur
Переход номеров версий с Darwin 1.4.1 на 5.1 с выпуском Mac OS X v10.1.1 был разработан для того, чтобы связать Дарвина с версией Mac OS X и системой нумерации сборки, который, в свою очередь, унаследован от NeXTSTEP. В системе нумерации сборок macOS каждая версия имеет уникальный начальный номер сборки, который определяет, частью какой целой версии macOS она является. Mac OS X v10.0 имеет номера сборки, начинающиеся с 4, 10.1 — номера сборки, начинающиеся с 5, и так далее (более ранние номера сборки представляли версии для разработчиков).
Команда uname -r в Терминале будет показан номер версии Darwin, а команда uname -v отобразит строку версии сборки XNU, которая включает номер версии Darwin.
Производные проекты
Из-за природы Дарвина бесплатного программного обеспечения, были проекты, направленные на изменение или улучшение операционной системы.
OpenDarwin

GNOME, работающий на OpenDarwin.
OpenDarwin был управляемой сообществом операционной системой, основанной на системе Дарвина. Он был основан в апреле 2002 года компаниями Apple Inc. и Консорциумом интернет-систем. Его целью было расширение сотрудничества между разработчиками Apple и сообществом свободного программного обеспечения. Apple выиграла от этого проекта, потому что улучшения OpenDarwin будут включены в выпуски Darwin; Сообщество свободного / открытого исходного кода извлекло выгоду из того, что ему был предоставлен полный контроль над собственной операционной системой, которую затем можно было использовать в таких дистрибутивах свободного программного обеспечения, как GNU-Darwin.
25 июля 2006 г. команда OpenDarwin объявила что проект закрывается, поскольку, по их мнению, OpenDarwin «превратился в простой хостинг для проектов, связанных с Mac OS X», и что попытки создать автономную операционную систему Darwin потерпели неудачу. Они также заявляют: «Этому способствовали доступность источников, взаимодействие с представителями Apple, сложность создания и отслеживания источников, а также отсутствие интереса со стороны сообщества». Последним стабильным выпуском была версия 7.2.1, выпущенная 16 июля 2004 года.
PureDarwin
PureDarwin — это проект по созданию загрузочного образа операционной системы из выпущенного Apple исходного кода для Darwin. После прекращения использования OpenDarwin и выпуска загрузочных образов, начиная с Darwin 8.x, становится все труднее создать полноценную операционную систему, поскольку многие компоненты становятся закрытыми. Проекту удалось создать рождественский выпуск на основе Darwin 9 с графическим интерфейсом X11 и командной строкой только 17.4 Beta на основе Darwin 17.
Другие производные проекты
- MacPorts (ранее DarwinPorts), Fink и Homebrew — хорошо известные проекты по переносу программ UNIX в операционную систему Darwin и обеспечению управления пакетами. Кроме того, несколько стандартных менеджеров пакетов UNIX, такие как RPM, pkgsrc и Portage, имеют порты Darwin. Некоторые из них работают в собственном пространстве имен, чтобы не мешать работе базовой системы.
- GNU-Darwin — это проект, который переносит пакеты бесплатного программного обеспечения в Дарвин. Они упаковывают образы ОС аналогично дистрибутиву Linux.
- Проект Darwine был портом для Wine, который позволяет запускать Программное обеспечение Microsoft Windows на Дарвине.
- SEDarwin является портом TrustedBSDструктуры обязательного контроля доступа и частей SELinux рамки к Дарвину. Он был включен в Mac OS X 10.5.
- Проект Darbat является экспериментальным портом Дарвина для семейства микроядер L4. Он стремится быть двоично-совместимым с существующими двоичными файлами Darwin.
- Проект Darling — это уровень совместимости для запуска двоичных файлов macOS в системах Linux. Он использует некоторый исходный код Darwin.
- Существуют различные проекты, направленные на поддержку драйверов: например, беспроводные драйверы, драйверы проводного NIC, драйверы модема, устройства чтения карт и ext2 и ext3 файловые системы.
См. Также
- Портал бесплатного программного обеспечения с открытым исходным кодом
- A / UX
- mkLinux
- OSF / 1
Ссылки
Внешние ссылки
- Дарвин выпускает на Apple Developer Connection
- исходный код отдельных пакетов
- Хексли, талисман Дарвина
- PureDarwin.org
- Музей Apple » Номера сборки MacOS X «на Wayback Machine (архивировано 25 декабря 2011 г.)
LXF164:Darwin:Вид происхождения

Darwin – это не тот, который выдумал теорию эволюции, а тот, на котором основана проприетарная Mac OS X. Читатели, возможно, удивятся: с чего это LXF рассказывает о проприетарной ОС? Загвоздка тут в том, что Darwin как раз-таки свободная и открытая ОС – причем в полном соответствии со смыслом, вкладываемым в эти слова FSF и OSI.
Ιστορία
Полагаю, что историю Darwin надо начать с ухода Стива Джобса из Apple. Мы не можем знать точно, из-за чего он ушел, но итогом стало то, что он переманил в новую фирму некоего Ави Теваняна [Avie Tevanian], который работал над микроядром Mach и был одним из его основных разработчиков (концепция Mach разработана в Университете Карнеги-Меллона). Переманил его Джобс, конечно, не просто так, а для разработки ОС, которая в дальнейшем получит название NeXTStep.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ — последняя отрыжка постмодерна
- «Ричард III и семиотика»
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна — говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек «новой волны», столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР — перепубликация из журнала «Топос».
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое «Мужское Государство» и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм «Пипец» (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить — в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Для разработки новой ОС было решено использовать объектно-ориентированные технологии. Неведомо почему был выбран Objective-C, а не C++. Некоторые источники показывают, что C++ к моменту начала работы над NeXTStep еще не был создан, но они вступают в противоречие с другими источниками, поэтому можно предположить, что новоявленная компания просто выбрала тот язык, который старше и больше похож на C – основной язык разработки ОС того времени. NeXT Computers лицензировала Obj-C в 1988.
Язык этот на тот момент был довольно «продвинутым» – он, например, включал ООП (причем ООП реализовано через сообщения, как в SmallTalk, несколько непохоже на то, к чему мы привыкли сейчас), динамическую типизацию, а в современной версии еще и сбор мусора.
Ядро же NeXTStep было гибридным (несмотря на то, что некоторые источники называют данную ОС микроядерной, это не так) и написанным на чистом C. Разработчики взяли лучшие черты микроядра Mach, такие как модульную архитектуру и ядра BSD (скорость и сетевой стек).
Чарльз Дарвин: вокруг света
Рассматривать установку будем на примере VMWare Server 1.0 – у автора отсутствует процессор с виртуализацией, а без нее многие современные виртуальные машины работают очень медленно. Тип виртуальной машины – FreeBSD, жесткий диск IDE; указываем ISO-образ, загружаемся с него. поехали!
� Шаг 1 Выбираем жесткий диск для установки. С этим, думается, проблем не возникнет ни у кого.
� Шаг 2 Выбор типа разметки жесткого диска. Тут мы, как это ни странно, выбираем ручную, ибо автоматическая, сколько ни пытались, не хотела работать. Нас выбросит в fdisk. Набираем auto hfs (автоматическая разметка диска с одним разделом HFS+) и. скорее всего, получаем ошибку вида “malloc:*** Deallocation of a pointer not malloced. ”. Еще раз набираем auto hfs – теперь уже этого сообщения не будет. Записываем MBR командой w, затем выходим из fdisk – quit. Теперь нас попросят выбрать корневой раздел – честно говоря, непонятно, зачем надо вводить его целиком, когда можно было бы выбирать из имеющихся путем нажатия соответствующей цифры – но это уже вопрос к разработчикам программы установки. Забегая вперед, скажем, что это далеко не единственная ошибка в ней. Далее у нас попросят подтвердить: действительно ли мы хотим совершить «чистую» установку? Отвечаем – и снова вопрос: имя тома; здесь можно написать что угодно. После ответа, как водится, жмем . Оба-на! Пишет “error: nknown filesystem type”. Уходим на перезагрузку – заново с образа. Замечаем, что на первом этапе появился пункт 3 – “Use existing partition”. Его и выбираем. Опять попросят указать корневой раздел. После этого будет вопрос: какой тип файловой системы использовать? Вопрос этот выглядит, по меньшей мере, странным – есть же таблица разделов, оттуда и берите – но теперь хотя бы понятна причина перезагрузки: установочная программа (скрипт?) попыталась подмонтировать раздел без ФС, и, естественно, вылезла вышеуказанная ошибка. С нас снова спросят подтверждение и имя тома – если нам еще не надоело, отвечаем на них, и – ура! – началось копирование файлов. Это может занять несколько мин. ой. Журнал-то про *nix, зачем здесь повторять сообщение Windows? Но, как бы то ни было, это довольно длительный процесс, и во время него можно, к примеру, съесть пирожное.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ — последняя отрыжка постмодерна
- «Ричард III и семиотика»
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна — говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек «новой волны», столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР — перепубликация из журнала «Топос».
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое «Мужское Государство» и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм «Пипец» (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить — в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
� Шаг 3 Копирование завершено. Нас спросят пароль root (дважды – в этом смысле все нормально), потом спросят имя домена, а затем выбор из 3 пунктов: создать нового пользователя, перезагрузиться и оболочка. Ну, пользователя можно создать и потом, оболочка порождается глючная, поэтому выбираем пункт 2 – Reboot. Перезагружаемся. и судорожно вспоминаем, был ли вопрос про загрузчик. Выясняется, что не было. Да-да! Его надо ставить ручками.
� Шаг 4 Снова загружаемся с образа. Только теперь необходимо работать в оболочке, поэтому набираем shell.Вошли.Набираем первую команду –
fdisk -f /usr/standalone/i386/boot0 -u -y /dev/rdisk0
Что эта команда делает? Делает она следующее: ставит первую часть загрузчика в MBR (без таблицы разделов – опция -u) без запроса подтверждения – опция -y.
� Шаг 6 После этой команды даем команду
dd if=/usr/standalone/i386/boot1h of=/dev/rdisk0s1
для установки загрузочного сектора раздела HFS+.
� Шаг 7 Монтируем раздел –
mount_hfs /dev/disk0s1 /mnt
и копируем файл –
cp /usr/standalone/i386/boot /mnt/
(собственно, сам загрузчик). Отмонтируем – umount /mnt – и перезагрузиммся – shutdown -r now. Установка завершена.
Первое знакомство
Загрузка может пойти нормально, а может и зависнуть (“Still waiting for root device”) – мы не смогли выяснить, с чем это связано. Во втором случае следует перезагрузиться – иногда несколько раз. После успешной загрузки видим приглашение входа в систему и ошибки ненастроеного mDNSResponder. Переводим строку и входим как root. Для начала хотелось бы порекомендовать скомпилировать старый добрый MC – конечно, можно обойтись и без него, но с ним удобнее.
С компиляцией придется повозиться: необходимо мало того что скачать как собственно MC, так и все необходимые зависимости, но еще и передать их на виртуальную машину. А каким образом? Сеть-то не настроена. Единственный более-менее доступный путь – использовать ISO-образ.
После того, как создадим и подмонтируем образ диска (на всякий случай – порядок действий: в каталоге /Volumes создать папку cdrom, потом смонтировать диск командой mount_cd9660 /dev/disk1s0 /Volumes/cdrom. Естественно, образ уже должен быть подготовлен для использования в виртуальной машине. Специфика Darwin. ), необходимо скопировать все файлы в домашний каталог. Команда копирования стандартная; единственное, что надо отметить – Darwin странно отображает файлы на ISO9660, поэтому копировать лучше по маске, а разархивировать с использованием автодополнения по клавише , благо оно имеется.
Да! Перед началом компиляции выполните следующие команды:
– устанавливает минимальную версию ОС;
– тоже понятно, но для тех, кому непонятно – указывается путь, куда при компиляции будут складываться библиотеки.
Собственно компиляция зависимостей происходит долго и нудно – распаковка (tar xzvf имя_архива), переход в каталог, configure, make, make install, распаковка, переход в каталог. важно лишь, в каком порядке – а он следующий: pcre, pkg-config, gettext, slang и, наконец, glib.
Зависимости скомпилировались – переходим к собственно mc. Тут действуем почти так же – но configure необходимо выполнить с опцией —with-screen=slang. И после выполнения make install будет нам счастье – скомпилированный mc под Darwin
Но счастье редко бывает полным – по неизвестным причинам в текстовом режиме в ОС от Apple не работают функциональные клавиши. По слухам, они работают в графическом терминале – но компиляция X-сервера и какого-либо оконного менеджера выходит за рамки этой статьи. А что же делать с функциональными клавишами? Придется использовать фокус – вместо функциональных клавиш – mc позволяет использовать комбинацию + цифра от 1 до 0. Не самый удобный способ, да, но с этим ничего не поделаешь.
Пройдемся немного по дереву каталогов – оно, дерево, сильно отличается от привычного нам. И не стоит забывать, что Darwin – «десктопная ОС без десктопа», если можно так выразиться, поэтому некоторые элементы там присутствуют лишь как заглушки. Итак, зрим в корень. и вот какие каталоги мы там видим.
» Каталог /.Trashes как раз и является заглушкой – в Mac OS X он выполняет функцию корзины для суперпользователя.
» Каталог /.vol – загадочный каталог, где находится еще один (или более) каталог с цифровым именем. Но если посмотреть вывод команды mount, становится понятным, что к оному каталогу подмонтирована псевдофайловая система volfs, назначение которой из названия, впрочем, не становится менее загадочным. Данная файловая система предназначена для доступа к файлам не по имени, а по inode. Это было необходимо для стыковки POSIX и Carbon API, который ныне (2012 год) считается уже устаревшим, но в версии Mac OS X, основанной на описываемом в данном разделе Darwin 8.0.1, был вполне себе живым.
» /AppleInternal – содержит некоторые заголовочные файлы.
» /Applications – опять же, предназначен для OS X. Туда обычно устанавливаются несистемные приложения c GUI, разработанные специально для ОС от Apple. Интересно, что в Darwin присутствует одно такое приложение, хотя GUI там и в помине нет – соответственно, даже и пытаться его запустить не стоит.
» /Developer содержит документацию, примеры исходных кодов и шаблоны проектов модулей ядра и расширений ядра – разница между ними будет пояснена чуть позже.
» /Library содержит некоторые важные конфигурационные файлы – в частности, файл /Library/Preferences/SystemConfiguration/com.apple.Boot.plist, необходимый для загрузчика, и некоторые логи.
» /Network – по всей видимости, служит для монтирования сетевых файловых систем.
» /System содержит подкаталог Library, ближайшим аналогом которого в Linux является /lib. В нем присутствуют фреймворки приложений, модули и расширения ядра, модули Perl.
» /Users содержит домашние каталоги пользователей и в этом смысле совершенно идентичен /home.
» /Volumes аналогичен /mnt и /media. Каталоги, созданные в нем пользователем, существуют до следующей перезагрузки – учтите это, когда будете в следующий раз монтировать компакт-диск.
» /bin, /dev, /sbin, /usr, /opt – объяснять не будем, и так все понятно. А вот каталоги /etc, /tmp и /var на самом деле являются символическими ссылками на соответствующие каталоги в /private.
Если уж заглянули в каталог /etc, давайте в файле profile исправим переменную PATH, добавив в число путей /usr/local/bin, и добавим переменные LIBDIR и MACOSX_DEPLOYMENT_TARGET (значения см. ранее) – на случай, если читателю захочется поупражняться в компиляции чего-либо POSIX-совместимого. В принципе, можно даже попытаться скомпилировать свежие версии ядра и базовых утилит, буде читатель окажется жестким извращенцем – автор этих строк не рискнул поставить подобный эксперимент.
Архитектурные особенности
Как и древние римляне, начнем с яйца – то есть с ядра. Ядро у ОС от Apple, как уже сказано, основано на микроядре Mach. Но «основано на микроядре» вовсе не означает, что архитектура микроядерная: архитектура гибридная, и условно состоит из трех слоев.
» В самом низу ядра лежит слой Mach, который отвечает за HAL (не стоит искать данного термина в документации, мы его используем для упрощения), управление процессорами, вытесняющую многозадачность, управление памятью, внутриядерный IPC, поддержку «мягкого» реального времени и, наконец, за отладку ядра – в качестве отладчика на отлаживающей машине используется GDB.
» Слой BSD лежит выше и включает реализацию процессов и сигналов, базовую модель безопасности, API POSIX, системные вызовы, поддержку сети и многое другое.
» Слой I/O Kit – это фреймворк, позволяющий разработчикам использовать ограниченный набор возможностей C++ для объектно-ориентированного программирования драйверов.
В принципе, эти слои не настолько четко разделены, поэтому некоторые могут еще что-то выделить, а некоторые, наоборот, предпочтут что-то убрать; но общая картина такова.
Xnu (так называется это ядро; расшифровывается же эта аббревиатура как. да-да, Xnu is not Unix – Столлмену впору обвинять Apple в плагиате) позволяет подключать к себе расширения – так называемые kernel extensions, в единственном числе kext. Расширения могут состоять из одного или более модулей ядра. Модуль ядра (Kmod) является минимальной единицей кода, которую можно загрузить в ядро.
В Darwin используется формат исполняемых файлов Mach-O и поддерживается технология, основанная на нем – мультиархитектурные исполняемые файлы. Отметим, что Apple применяла ее для переноса OS X с архитектуры PowerPC на Intel.
Теперь рассмотрим такие специфические особенности Darwin, как «пакеты [bundles]» и фреймворки (примечание: здесь и далее речь может пойти о вещах, которые не поддерживаются в версии Darwin 8.0.1 – сия версия 2005 года, а сейчас уже, почитай, 2012 заканчивается скоро). «Пакетом» в данном контексте называется набор связанных ресурсов, в число которых могут входить исполняемые файлы, изображения, аудио, заголовочные файлы и даже другие пакеты. Ясное дело, что такой «пакет» – понятие абстрактное, а посему приведем конкретный пример – фреймворк. Фреймворк – набор, состоящий из одной или более динамических библиотек с заголовочными файлами, документацией, локализацией и сопутствующими программами для облегчения работы. Давайте рассмотрим некоторые фреймворки, входящие в состав ОС от Apple.
Уже упоминавшийся ранее I/O Kit – фреймворк, состояший из двух частей: режима пользователя и режима ядра. Часть пользовательского режима отвечает за простой доступ к оборудованию из приложений, а часть режима ядра – за базовую иерархию классов и поддержку C++. Мы уже отмечали, что C++ в I/O Kit несколько ограничен. Заключается это в отсутствии таких вещей, как шаблоны, исключения, RTTI и множественнное наследование. Тем не менее, это нисколько не мешает разработчикам писать драйверы.
CoreFoundation – фреймворк, обеспечивающий базовые возможности для программ, написанных на Objective-C, такие как разбор XML-файлов, доступ к ресурсам через URL, управление списками свойств и многие другие.
Для облегчения работы с сетью предназначен фреймворк CFNetwork. Он делает удобной работу с сокетами, создание SSL/TLS-соединений, разрешение имен. Разработчик желает работать с HTTP или FTP? Никаких проблем – за это также отвечает данный фреймворк.
Нельзя не упомянуть и о файловой системе HFS+. Особенностями она по современным меркам не отличается (разве что поддержка любых символов Юникода в имени файла, за исключением символа NUL), но все же перечислим ее возможности. Это журналирование, B-деревья для эффективного поиска файлов, прозрачное сжатие.
А как обстоят дела с безопасностью? О, с безопасностью все хорошо, не сомневайтесь! Вот некоторые возможности и технологии, так или иначе относящиеся к ней:
» ASLR Технология, размещающая в ОЗУ некоторые критично важные системные данные случайным образом. Это серьезно осложняет эксплуатацию ряда атак, требующих знания их расположения.
» NX-бит Запрещает выполнение кода в стеке и в куче.
» Права доступа Стандартная модель Unix.
» ACL Расширенная система прав доступа; позволяет индивидуально для каждого пользователя назначать права доступа к файлам.
» Kauth Мандатная система контроля доступа; аналогична SELinux.
» Шифрование раздела подкачки.
» IPSec Его реализацию, как, впрочем, и в Linux,стащили из FreeBSD.
» Подписывание исполняемых файлов Возможно теоретически.
Необъятное объять нельзя – nemo omnia potest scire – но автор и не ставил такой цели, он ставил цель заинтересовать читателя. Хотелось бы надеяться, что у него это получилось.
Итоги
Впечатление о данной ОС сложились неоднозначные: с одной стороны, интересно посмотреть на внутренности коммерческой ОС от Apple, а с другой. Darwin явно не является системой для настольного использования. Предпринимались попытки создать дистрибутив на основе этой ОС, но особого успеха они не получили. Может быть, выйдет у кого-нибудь из наших читателей. |
Пакеты, необходимые для компиляции MC версии 4.6.1: