Easyboot
========

[Easyboot](https://gitlab.com/bztsrc/easyboot) — универсальный загрузочный *менеджер* и создатель образа загрузочного диска, который
может загружать различные ядра ОС и ядра, совместимые с Multiboot2, в различных двоичных форматах.

![Easyboot](https://gitlab.com/bztsrc/easyboot/raw/main/docs/screenshot.png)

ПРИМЕЧАНИЕ: Если вы ищете загрузочный *загрузчик*, который загружает только одно ядро, обратите внимание на младшего брата
**Easyboot**, [Simpleboot](https://gitlab.com/bztsrc/simpleboot).

Подтверждение
-------------

Этот проект был бы невозможен без поддержки [Фонда свободного программного обеспечения Венгрии](https://fsf.hu/nevjegy).
Проект был создан в рамках тендера бесплатного программного обеспечения FSF.hu 2023.

Преимущества перед GRUB
-----------------------

- независимый, простой в использовании, многоязычный установщик
- не раздутый, занимает всего около 0,5% от размера GRUB
- легко настроить, есть проверка синтаксиса
- легко исправлять таблицы ACPI с помощью предоставленного пользователем DSDT
- показывает подробности ошибки, если ядро отключается на ранней стадии
- Multiboot2: чистая 64-битная точка входа (нет необходимости встраивать теги или 32-битный код батута в ядро)
- Multiboot2: поддержка ядер более высокой половины
- Multiboot2: независимая от прошивки, согласованная карта памяти на всех платформах
- Multiboot2: независимый от прошивки, согласованный фреймбуфер на всех платформах
- Multiboot2: также предоставляется информация EDID монитора
- Multiboot2: при желании запускает ядро на всех ядрах процессора (поддержка SMP)
- также существует плагин для имитации загрузки GRUB со всеми ее подводными камнями и ошибками.

Поддерживаемые ядра: [Multiboot1](https://www.gnu.org/software/grub/manual/multiboot/multiboot.html) (ELF32, PE/COFF, a.out;
BIOS, UEFI, RPi), [Multiboot2](docs/ru/ABI.md) (ELF32, ELF64, PE32+/COFF, a.out; BIOS, UEFI, RPi),
[Linux](https://www.kernel.org/doc/html/latest/arch/x86/boot.html) (BIOS, UEFI, RPi),
[Windows](https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/boot-and-uefi) (UEFI),
[OpenBSD](https://man.openbsd.org/boot.8) (BIOS, UEFI),
[FreeBSD](https://docs.freebsd.org/en/books/handbook/boot/) (BIOS, UEFI),
[FreeDOS](https://www.freedos.org/) (BIOS), [ReactOS](https://reactos.org/) (BIOS),
[MenuetOS](https://menuetos.net/) 32 / 64 (BIOS, UEFI), [KolibriOS](https://kolibrios.org/ru/) (BIOS, UEFI),
[SerenityOS](https://serenityos.org/) (BIOS, UEFI), [Haiku](https://www.haiku-os.org/) (BIOS, UEFI)

Поддерживаемые файловые системы: [FAT12/16/32](https://social.technet.microsoft.com/wiki/contents/articles/6771.the-fat-file-system.aspx),
[exFAT](https://learn.microsoft.com/en-us/windows/win32/fileio/exfat-specification),
[NTFS](https://github.com/libyal/libfsntfs/blob/main/documentation/New%20Technologies%20File%20System%20%28NTFS%29.asciidoc) (v3, v3.1),
[ext2/3/4](https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout),
[XFS](https://mirror.math.princeton.edu/pub/kernel/linux/utils/fs/xfs/docs/xfs_filesystem_structure.pdf) (SGI),
[UFS](https://alter.org.ua/docs/fbsd/ufs/) (v2, v4.4),
[mfs](https://gitlab.com/bztsrc/minix3fs) (Minix3),
[BeFS](https://www.haiku-os.org/legacy-docs/practical-file-system-design.pdf) (Haiku),
[AXFS](https://gitlab.com/bztsrc/alexandriafs) (OS/Z)

(Когда ядро расположено в загрузочном разделе, то в качестве root можно использовать любую файловую систему: ZFS, btrfs и т. д.)

Обоснование
-----------

Я создал простой в использовании загрузчик, и пользователи просили все больше и больше функций. Я хотел сохранить этот загрузчик как
максимально простой, но FSF.hu предлагал поддержку, поэтому я решил его форкнуть и добавить все запрошенные функции в этот менеджер
загрузки вместо.

Это также инструмент [безсосный](https://suckless.org), такой как Simpleboot, не имеющий зависимостей и чрезвычайно простой в
использовании:

1. создайте каталог и поместите в него загрузочные файлы, а также конфигурацию меню и дополнительные плагины
2. выполните команду `easyboot (исходный каталог) (файл выходного изображения)`
3. и... вот и всё... больше делать нечего! Образ *Просто работает (TM)*, ваши ядра загрузятся!

Вы можете установить менеджер загрузки и сделать существующее устройство или образ загрузочным; или вы можете создать загрузочный
образ заново. Ты можешь загрузите этот образ на виртуальной машине или вы можете записать его с помощью `dd` или
[USBImager](https://bztsrc.gitlab.io/usbimager/) в хранилище и загрузиться это и на реальной машине тоже.

Простота есть основа утонченности!

Монтаж
------

Просто скачайте бинарный файл для вашей ОС. Это переносимые исполняемые файлы, они не требуют установки и не требуют каких-либо
дополнительных действий общие библиотеки/DLL.

- [easyboot-x86_64-linux.tgz](https://gitlab.com/bztsrc/easyboot/-/raw/main/distrib/easyboot-x86_64-linux.tgz) Linux, \*BSD (1M)
- [easyboot-i686-win.zip](https://gitlab.com/bztsrc/easyboot/-/raw/main/distrib/easyboot-i686-win.zip) Windows (1M)

Кроме того, в каталоге [distrib](distrib) вы можете найти различные упаковочные решения (для Debian, Ubuntu, RaspiOS, Gentoo,
Arch).

При создании образа (в зависимости от вашей конфигурации) вам также могут понадобиться некоторые плагины в вашем `(исходный каталог)`.
Ты их можно найти в каталоге [src/plugins](src/plugins), используя расширение `plg`. При установке из пакета они будут помещен в
`/usr/share/easyboot`.

Документация
------------

Подробную [документацию](docs/ru) (на английском языке) о том, как использовать средство создания загрузочного диска и как
загружается ядро, можно найти в каталоге docs.

Пример ядра
-----------

Если вы хотите написать ядро, которое можно будет загрузить без какого-либо плагина, используя протокол [упрощенный Multiboot2](docs/ru/ABI.md)
**Easyboot**, взгляните на [Пример ядра Simpleboot](https://gitlab.com/bztsrc/simpleboot/-/tree/main/example). Оба загрузчика
используют один и тот же протокол загрузки, это ядро работает с **Easyboot** как есть. Вы увидите, что ни сборка, ни встроенные
теги не требуются, в противном случае исходный код на 99,9% такой же, как пример в спецификации Multiboot2 (единственная разница в
том, что он печатает на последовательной консоли, а не на экране телетайпа VGA, потому что это последний не существует на машинах
UEFI и RaspberryPi).

Компиляция
----------

GNU/make необходим для оркестровки (хотя буквально это просто `cc easyboot.c -o easyboot`). Инструментарий не имеет значения,
подойдет любой компилятор ANSI C, он также работает с POSIX и WIN32 MINGW. Просто перейдите в каталог [src](src) и запустите make.
Вот и все. Несмотря на небольшой размер, он автономен, и при компиляции он не имеет никаких зависимостей от библиотек. Он не зря
называется **Easyboot** :-)

Чтобы перекомпилировать загрузчики, вам понадобится [flatassembler](https://flatassembler.net), а также LLVM Clang и lld (боюсь,
gcc и GNU ld не будут работать). Но не волнуйтесь, я добавил их все в src/data.h в виде массива байтов, поэтому вам не придется
их компилировать, если вы действительно этого не хотите (для этого просто удалите data.h). прежде чем запускать make).

С другой стороны, для компиляции плагинов вам понадобится кросс-компилятор LLVM CLang или GNU gcc (x86_64-elf-gcc, aarch64-elf-gcc).
Репо также включает их в виде двоичных файлов. Чтобы выполнить перекомпиляцию, просто удалите файлы `src/plugins/*.plg` перед
запуском make.

Лицензия
--------

**Easyboot** — это бесплатное программное обеспечение с открытым исходным кодом, лицензируемое на условиях GPL версии 3 или (по
вашему мнению) любой более поздней версии. Подробности см. в файле [LICENSE](LICENSE).

bzt
