- Чем ядро macOS отличается от ядра Linux
- Коммерческий проект
- Студенческая разработка
- Не Юникс
- Какая из систем старше
- Решающая роль экранной картинки
- building Linux kernel on Mac OS X
- 6 Answers 6
- Разница между macOS и ядрами Linux
- История ядра macOS
- История ядра Linux
- Особенности ядра macOS
- Особенности ядра Linux
- Разница между ядром Mac и Linux в одной строке
Чем ядро macOS отличается от ядра Linux
Многие полагают, что macOS основана на ядре Linux. На самом деле две системы значительно различаются и своей историей и своими особенностями. Сегодня я рассмотрю эти отличия, хотя и сходство, конечно же, тоже имеется.
Широко известно, что Android, самая популярная операционная система для умных телефонов и планшетных компьютеров, основана на Линуксе. И зачастую это представление переносится и на те системы, которые управляют работой устройств, предлагаемых компанией Apple. И не только ее компьютеров, но также iPhone и iPad.
Коммерческий проект
В далеком 1985 году Стив Джобс вынужден был покинуть Apple из-за разногласий с Джоном Скалли, который тогда был главой компании. Легендарным компьютерным гением была основана новая компания — NeXT. Для экономии времени при создании новой ОС ею использовалось ядро Mach от Университета Карнеги-Меллона и часть кода BSD. Итогом этого труда стала система NeXTSTEP.
Как известно, NeXT так никогда и не удалось достичь финансового успеха. Тем временем, Apple неоднократно пыталась обновить свою ОС. В числе ее попыток было даже партнерство с IBM.
В 1997 году Apple приобрела новую компанию Стива Джобса. Он вернулся в основанную им совместно со Стивом Возняком компанию и принес с собой NeXTSTEP, которая со временем и легла в основу macOS и iOS.
Студенческая разработка
Линукс изначально была некоммерческим проектом. Ее ядро было разработано финским студентом Линусом Торвальдсом. Его код был опубликован в Usenet в августе 1991 года и студенту начали поступать предложения по использованию кода. В 1992 году у Линукса появилась поддержка графического интерфейса.
Не Юникс
Ядро macOS называется XNU и расшифровывается как «X — не Unix». Оно является гибридным ядром, в котором части ядра Mach сочетается с FreeBSD и C++ API, используемым для написания драйверов. Фрагменты Mach отвечают за выполнение задач низкого уровня, в числе которых — многозадачность, защищенная память, управление виртуальной памятью и поддержка отладки ядра.
Таким образом, даже в самой максимально упрощенной формулировке, macOS правильнее считать системой, основанной на BSD, а не на Линуксе.
Какая из систем старше
Если macOS включает в себя микроядро Mach и монолитное ядро BSD, то Линукс основана исключительно на монолитном ядре. Оно отвечает за управление центральным процессором, памятью, взаимодействием между процессорами, драйвера устройств, файловую систему и взаимодействие с сервером.
Возможно многие из вас удивятся, но ядро XNU, на котором основана система Apple, по сути является более «древним», чем Линукс. Ведь оно базируется на двух намного более старых базах кода. Линукс новее и была написана «с нуля». Она находит себе в применение в самых разнообразных устройствах, а не только в девайсах, выпускаемых одной компанией.
Таким образом, в корне неправильным оказывается и другое распространенное представление, согласно которому Mac и iPhone прочно ассоциируются в сознании пользователей с чем-то очень современным и молодежным, а Линукс — с системой для пожилых программистов, которые еще помнят эпоху гигантских вычислительных машин.
Решающая роль экранной картинки
Другое дело, что являясь коммерческим проектом, macOS развивается лидером технологической индустрии. Она постоянно совершенствуется и, что самое главное для многих пользователей, становится более привлекательным ее графический интерфейс. Пользователь не работает напрямую с ядром, поэтому для многих в понятие «операционная система» входит прежде всего ее «графика».
Впрочем, современные Линуксы также весьма привлекательны, но, возможно, им не хватает того стиля и гармонии, которые годами шлифовались лучшими специалистами. «Линуксовых» систем огромное множество и они значительно различаются между собой и дизайном и функционалом, что также не способствует их привлекательности для обычного пользователя, который предпочел бы, чтобы все на компьютере из года в год выполнялось так, как он привык.
Какую операционную систему предпочитаете вы и почему именно она нравится вам больше альтернативных вариантов?
building Linux kernel on Mac OS X
I am doing a project to modify the Linux kernel. I have a desktop Linux machine and I have no problem building kernel on it. However, I am going on a trip and I want to work on my way. I only have a MacBook. When I tried to build the Linux kernel, it complained that elf.h was not found . I download an elf.h from internet. Now it complains: NO ELF I tried copying the entire /usr/include from my Linux desktop, and set it as the include directory, and still get strange errors like «u8» not declared What is the standard way of doing kernel development on Mac? I have a virtual machine running Linux on the same Mac, and it will be used to test the modified kernel. However, I don’t really want to build kernel on it, as it is kinda slow.
Can you post the exact error you’re getting? NO ELF doesn’t provide a lot of context. When do you see that and what happened before that?
@Mike, I agree, that is the exact error, after I copy a elf.h file from internet and add it to a include directory so that make can find it. I don’t know how to make it more informative. It happens pretty early.
@AlfredZhong, what make target do you invoke to get NO ELF ? Have you tried adding a verbose flag to make to see what exactly it’s doing; I think with Linux you use make V=1 ? Also, why did you copy elf.h from the internet? I’d copy it from your VM where compiling that kernel is known to work.
6 Answers 6
First, I agree that it’s usually simpler to just use a Linux VM. That said, if you really want to do this, I have successfully compiled Linux kernel code using the procedure below.
Before you can even start, you may need to install the Linux source tree on a case-sensitive filesystem on your Mac. (the default HFS filesystem is case insensitive.) I won’t cover that here, but a lot of people do this to compile the Android source tree, so you can use Google to find instructions.
First you’ll need the following files to cross-compile a kernel on an OS X box (copy them from your known-working Linux VM to your local /usr/include ):
/usr/include/elf.h /usr/include/features.h /usr/include/bits/predefs.h /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h
Next you’ll need malloc.h to be in the expected location for a Linux system, so do:
sudo ln -s /usr/include/malloc/malloc.h /usr/include/malloc.h
Finally, you’ll need to worry about whether or not the compiler installed on your system is suitable for building the Linux kernel. I have used this procedure for kernels compiled for Android, using an appropriate cross-compiler toolchain, but I’m not sure if you can successfully compile a Linux kernel with the default gcc compiler on OS X (assuming you have the one that comes with Xcode. )
EDIT: You may also want to follow the steps pointed out in the bug linked in the comment above from «nmagerko», to ensure you have the correct dependencies, and the GNU version of sed . In particular:
$ sudo port install libelf $ sudo port install gsed
This is a common question (well, usually it’s building on Windows, but the answer is the same).
Just don’t do it. You’re going to have so much trouble getting anything to build correctly, it’s just not worth it. Use a virtual machine, as you said yourself. It’s a little slower, but not all that much, and at least building will work correctly.
Kernel development is hard enough without introducing additional, unnecessary problems.
I agree. I gave up. I thought people might figured it out and came up with convenient way. And it turns out be to wrong.
Here is an update for Android 6.0 Marshmallow and OSX 10.10 Yosemite. I have done several successful cross builds using this method. The only limitation is that I have only done these with the full AOSP source checked out.
I used brew’s libelf to get a nice package managed elf library. This gets us the elf file we need to include, usr/local/opt/libelf/include/libelf/gelf.h
But this will still throw errors on build if you symlink it to usr/local/include as apparently some definitions are missing. So I stole the missing definitions from /arch/arm/include/asm/elf.h and created a shim include file:
cat > /usr/local/include/elf.h #include "../opt/libelf/include/libelf/gelf.h" #define R_386_NONE 0 #define R_386_32 1 #define R_386_PC32 2 #define R_ARM_NONE 0 #define R_ARM_PC24 1 #define R_ARM_ABS32 2 #define R_MIPS_NONE 0 #define R_MIPS_16 1 #define R_MIPS_32 2 #define R_MIPS_REL32 3 #define R_MIPS_26 4 #define R_MIPS_HI16 5 #define R_MIPS_LO16 6 #define R_IA64_IMM64 0x23 /* symbol + addend, mov imm64 */ #define R_PPC_ADDR32 1 /* 32bit absolute address */ #define R_PPC64_ADDR64 38 /* doubleword64 S + A */ #define R_SH_DIR32 1 #define R_SPARC_64 32 /* Direct 64 bit */ #define R_X86_64_64 1 /* Direct 64 bit */ #define R_390_32 4 /* Direct 32 bit. */ #define R_390_64 22 /* Direct 64 bit. */ #define R_MIPS_64 18 EOT
That should be enough to get the build to complete. If anyone needs further information on this, I have a post that covers a full Android kernel build on OSX.
Разница между macOS и ядрами Linux
Некоторые люди могут подумать, что есть сходство между macOS и ядром Linux, потому что они могут обрабатывать похожие команды и аналогичное программное обеспечение.
Некоторые люди даже думают, что MacOS от Apple базируется на Linux.
Правда в том, что оба ядра имеют очень разные истории и особенности.
Сегодня мы рассмотрим разницу между ядрами macOS и Linux.
История ядра macOS
Мы начнем с истории ядра macOS.
В 1985 году Стив Джобс покинул Apple из-за ссоры с генеральным директором Джоном Скалли и советом директоров Apple.
Затем он основал новую компьютерную компанию NeXT.
Джобс хотел быстро выйти на новый компьютер (с новой операционной системой).
Чтобы сэкономить время, команда NeXT использовала ядро Mach) от Carnegie Mellon и части базы данных BSD для создания операционной системы NeXTSTEP.
NeXT никогда не становился финансовым успехом, отчасти благодаря привычке Джобса тратить деньги, как и на Apple.
Между тем, Apple несколько раз пыталась обновить свою операционную систему, даже до тех пор, пока не была партнером IBM.
В 1997 году Apple приобрела NeXT за 429 миллионов долларов.
В рамках сделки Стив Джобс вернулся в Apple, а NeXTSTEP стал основой macOS и iOS.
История ядра Linux
В отличие от ядра macOS, Linux не был создан как часть коммерческой деятельности.
Вместо этого он был создан в 1991 году финским студентом-информатиком Линусом Торвальдсом.
Первоначально ядро было написано по спецификациям компьютера Линуса, потому что он хотел воспользоваться своим новым процессором 80386.
Линус опубликовал код для своего нового ядра в Интернете в августе 1991 года.
Вскоре он получал предложения по коду и предложениям со всего мира.
В следующем году Orest Zborowski портировал систему X Windows на Linux, предоставляя ей возможность поддерживать графический интерфейс пользователя.
За последние 27 лет Linux вырос и приобрел функции.
Это уже не маленький проект студента.
Теперь он управляет большинством вычислительных устройств в мире и суперкомпьютерами в мире.
Особенности ядра macOS
Ядро macOS официально известно как XNU.
Сокращение означает, что «XNU – это не Unix».
Согласно странице Github от Apple, XNU является «гибридным ядром, объединяющим ядро Mach, разработанное в Университете Карнеги-Меллона, с компонентами FreeBSD и C ++ API для написания драйверов».
Подсистема BSD часть кода «обычно реализуется как серверы пользовательского пространства в микроядрах».
Часть Mach отвечает за работу на низком уровне, такую как многозадачность, защищенная память, управление виртуальной памятью, поддержка отладки ядра и консольный ввод-вывод.
Особенности ядра Linux
В то время как ядро macOS сочетает в себе свойство микроядра (Mach)) и монолитного ядра (BSD), Linux является единственным монолитным ядром.
Монолитное ядро отвечает за управление процессором, памятью, межпроцессорной связью, драйверами устройств, файловой системой и системными серверами.
Разница между ядром Mac и Linux в одной строке
Ядро macOS (XNU) было дольше, чем Linux, и было основано на сочетании двух ранних кодовых баз.
С другой стороны, Linux новее, написан с нуля, и используется на многих других устройствах.