Фактически, имеется ядро Linux в ядре FreeBSD; различные базовые функции, реализующие все услуги яд-
ра, идентичны как в записях таблицы системных вызовов FreeBSD, так и в записях таблицы системных
вызовов Linux: операции с файловой системой, виртуальная память, средства доставки сигналов, System
V IPC ... Единственное отличие в том, что FreeBSD-программы получают интерфейсные функции FreeBSD,
а Linux-программы получают интерфейсные функции Linux (в большинстве более старых ОС есть только
их собственные интерфейсные функции: функции берутся из статического глобального массива структур
sysent[] , а не из массива, полученного разыменованием динамически проинициализированного указа-
теля в структуре proc процесса, выполняющего вызов).
Какая же реализация ABI для FreeBSD «родная»? Это не имеет значения. Единственное различие (на данный
момент, в будущем все может и, вероятно, изменится), пожалуй, в том, что функции системных вызовов
FreeBSD зашиты в ядро, а для Linux они могут быть либо статически скомпонованы в ядро, либо получаться
через модуль ядра.
Да, но можно ли назвать это эмуляцией? Нет. Это реализация ABI, а не эмуляция. Как таковой, эмулятор
(или симулятор) отсутствует.
В таком случае, почему же иногда говорят об «эмуляции Linux»? Чтобы «насолить» FreeBSD! Фактически,
причина в том, что на момент первой реализации не существовало слова, которое бы точнее описывало
этот процесс. Нельзя было сказать, что FreeBSD запускает приложения Linux (без перекомпиляции или за-
грузки соответствующего модуля ядра это невозможно). Но надо было как-то описать, что загружается -
отсюда и «эмулятор Linux».