Feral - это монолитное ядро, просто как небольшой хобби, чтобы построить полную операционную систему с нуля, даже если это очень медленно.
Feral предназначен для работы на недавних системах ПК с разумно совместимым BIOS. На данный момент Feral не поддерживает UEFI, хотя порт находится в процессе.
Дикий, на данный момент, предполагает наличие двух фото 8259A, присутствующих в традиционных PC-совместимых микрокомпьютерах. На современных микросхемах ваш Southbridge, такой как X399 или X470, вероятно, имеет что -то совместимое. В будущем Feral намерен продолжить использование новых функций процессора, таких как APIC, и в конечном итоге XAPIC и X2Apic. Кроме того, Feral будет поддерживать симметричную многопроцессорную работу.
В настоящее время тестируемое аппаратное обеспечение включает в себя компьютер с материнской платой 4 «X4» и процессором N3700 («Braswell») с 4 ГБ оперативной памяти, ноутбуком 17Z с 2500U (вышеупомянутый Zen 1) и в будущем X5-Z8350 с 2 ГБ ОЗУ («Cherry Trail»).
В будущем Feral предназначен для работы на Aarch64 (BCM2711), Power (SFORZA) и RV64GC (U540), с портами, записанными где -то в этом порядке.
Архитектурно, Feral - это простое монолитное ядро, которое архитектурно разделяет много счетов с Mach и Plan 9, особенно последним. Feral предпочитает размещать большую часть функциональности в драйверов, а не прямо выпекать в самом ядре, чтобы обеспечить большую гибкость и выявлять ресурсы как местоположение сети и розетки, чтобы лучше отражать, как работают современные процессы и хранение.
Например, чтобы открыть файл, один запросит файловый сервер, который представляет собой процесс, принадлежащий ядру, который открывает сокет, который принимает входящий трафик. Затем его можно прочитать или записано, в зависимости от того, как открывалась гнезда.
Основная идея состоит в том, чтобы взять модульность и гибкость микрокернелов и привить их в традиционную архитектуру монолитного ядра, жертвуя способностью делать такие вещи, как перезапуск драйверов файловых систем, сохраняя такие преимущества, как чистая архитектура, слоя драйверов и несколько поставщиков водителей.
Feral создан для меня, чтобы узнать больше о дизайне операционных систем, при этом уходя от традиционного способа «сделать еще один *клон». Кроме того, я хотел бы изучить, насколько отличается новая ОС от традиционных систем, в то же время будет легко переносить существующее программное обеспечение.
Хотя это изображение устарело, поскольку некоторые из этих подсистем должны быть поглощены ядром, по большей части это точнее намерение: 
Feral теперь использует Cmake для построения. Утилитный скрипт включен для общего случая строительства для x86_64 и QEMU в vm_test.sh , а также с заглушкой GDB, включенным в vm_test_gdb.sh .
Для строительства вручную вы должны использовать Clang в качестве компилятора C. Для цели x86-64-PC без поддержки EFI вы можете использовать файл Toolchain Cmake/x86_64-pc.cmake с параметром -DCMAKE_TOOLCHAIN_FILE=cmake/x86_64-pc.cmake . Это построит собственное ядро как «Feralker», и для создания загрузочного ISO -файла потребуются некоторые дополнительные шаги. Смотрите файл vm_test.sh для получения подробной информации.
Feral должен комфортно работать на любом ПК, внедряющем набор инструкций x86-64 (то есть, по крайней мере, ЦП8 K8), и не менее 1 ГБ системной памяти. Это требование к памяти будет снижено в будущем, но сейчас необходимо для того, чтобы сделать вещи немного проще при настройке ядра.
Feral ожидает, что VGA-совместимый адаптер дисплея будет присутствовать для ПК. Таким образом, вам понадобится какая -то форма видеодаптера, способную работать в режиме VGA. Большинство процессоров и графических процессоров в классе потребителей реализуют это по крайней мере в одном из их графических процессоров.
В настоящее время Feral проверяется исключительно на виртуальных машинах на вершине дзен 1 1950x и несколько небольших машин Zen 1. Вероятно, дикий будет нормально работать на другом оборудовании, но оно не тестируется.
Папки должны быть названы таким образом, чтобы избежать ненужных символов (то есть «Inc 'vs» incluct'.) Точно так же для данного модуля имя папки должно отражать префикс, так что управление памятью находится в «MM», а управление объектами находится в «OB» и так далее.
Функции THAAT должны быть экспортированы между модулями, как правило, должны иметь соглашение о именовании (подсистема) (функциональное назначение) (опциональный тип аргумента), такой как «kestartProcessor». Когда функция является специфичной для архитектуры, она должна быть предварительно профиксирована с архитектурой, к которой она принадлежит, такой как «aarch64StartPaging ()» или «x86Setupidt ()». Для получения более подробной информации см. Formatting.txt
Кроме того, функции должны использовать макросы в, inout, opt и т. Д., Чтобы четко определить, что функция выполняет с аргументом. Эти макросы не распространяются ни на что, и только там, чтобы помочь в документации.
Легкое ядро ядра. Большинство функциональности у драйверов. Обрабатывает общение с Libos (Syscalls идут в таблицу ядра, которая сообщает водителю Libos, что это было вызвано.)
Драйверы обрабатывают системные вызовы, чтобы позволить запускать «иностранные» программы, такие как версия GCC GNU Mach, или все любимая игра DOS на MARS.
Стабильное, внутреннее ядро Аби. Сторонние водители должны работать с незначительными изменениями. Используйте указатель PNEXT для любых серьезных изменений.
Стабильная, включенная в файловая система версий, так что случайный deltree не удаляет все вечно. Предположим, что пользователь не делает резервных копий.
(В конце концов) Создайте полностью вулканские драйверы для семейства «Вега» и «Нави» GPU.
Поддержка x86-64 расширения виртуализации («Pacifica»).
Что -то вроде тюрьмы или контейнеров Chroot или контейнеров, чтобы дисло было полезно для операций сервера.
На что -то веселое, над которым можно было бы быть полезным однажды?