UZIX — это реализация UNIX для компьютеров MSX (Unix Implementation for MSX). Она основана на UZI, разработанной Дугласом Брауном, и была портирована на MS-DOS / MSX Аркадием Щекочихиным и Адриано да Кунья (Adriano C. R. da Cunha). UZIX может быть запущена на PC (из MS-DOS) или на MSX2/2+/TurboR. Исходный код в основном написан на Си, и транслировался с помощью Turbo-C (ПК) и Hitech C (MSX).
MS-DOS версия разрабатывалась Аркадием, практически самостоятельно, с 1997 по 2001. Адриано, в свою очередь, почти целиком ответственен за портирование на MSX. В версии 1 система занимала в ОЗУ менее 30Кб (а точнее, 25.8Кб). Это, наверное, самая компактная реализация 7th Edition, какую только возможно найти.
Для UZIX было создано и портировано много подсистем и приложений, таких как стэк TCP/IP, клиенты telnet, ftp, irc, демоны telnetd и httpd, и даже графический Web-браузер FudeBrowZer, разработанный Рикардо Битенкуром (Ricardo Bittencourt).
В 2002 году вышла версия UZIX 2. Это был большой шаг вперед по сравнению с первой версией. Основным отличием стало большее ядро, позволяющее включить в него больше функций, и, в то же самое время, большее пространство ОЗУ, доступное для прикладного кода — что открыло возможности для запуска более крупных приложений. В этой версии UZIX получил и множество других улучшений: в частности, графическую систему (не X11), модульное ядро (с возможностью горячей загрузки и выгрузки модулей ядра), была также предпринята попытка создать собственные средства разработки - FOCA - компилятор Си (не завершен), ассемблер Z80, оптимизатор. Разработкой FOCA занимались Фелипе Берго (Felipe Bergo) и Адриано Кунья. Последней версией UZIX стала 2.1alfa от 24/09/2003. Последняя правка в файлы UZIX вносилась 18/03/2005, после чего разработка, очевидно, прервалась.
Поскольку на компьютерах 8080 семейства нет стандартного механизма менеджмента памяти (MMU), многопроцессность достигается методом «total swapping» (полного своппинга). Но, в отличие от UZI, для «total swapping» используется не жесткий диск, а память маппера. На PC — для этого используется «расширенная память». В обоих случаях, UZIX доступно 64Кб адресного пространства (всё адресное пространство Z80 или один полный сегмент на PC). Собственно UZIX располагается в верхних 32Кб памяти, а работающий в данный момент процесс занимает нижние 32Кб. UZIX не может обойтись без некоторых дополнительных устройств. Во-первых, должен присутствовать, в том или ином виде, таймер или часы, которые могут обеспечить периодическое прерывание. Также, дополнительно используются часы реального времени (RTC) для получения времени для временных меток файлов, и т.п. TTY-драйвер опрашивает клавиатуру в цикле ожидания — а не предполагает работу от прерываний, как в UZI.
Существует специальная «лайт-версия» UZIX для MSX1, работающая в режиме 40 символов в строке, и эмулирующая недостающий RTC для своих нужд. Но, в виду отсутствия в MSX1 штатного RAM-маппера, она использует бразильский MegaRAM, что замедляет работу системы, по-сравнению с MSX2. Скачать её можно здесь.
Операционная система, аналогично, использует маппер MSX2/2+/TR для «total swapping». Но само ядро UZIX занимает все 64Кб памяти, разделенное на две части — 48Кб для выгружаемой части ядра, и 16Кб для невыгружаемой (резидентной). Резидентная часть является интерфейсом между userland-программами и остальным ядром. Во время системных вызовов или прерываний, выгружаемая часть ядра свопится так же, как любой другой процесс. Приложения занимают в ОЗУ, как минимум, 16Кб, а максимум — 48Кб (в зависимости от их размера). UZIX 2 поддерживает до 4096Кб памяти. Максимальное количество процессов 31.
Попробовать UZIX 2 можно в эмуляторе WebMSX. Логин — root без пароля.
Примечание 1
Разработчиком поддержка изначально не заявлялась, но в 2022 году была случайно обнаружена де-факто, и полностью подтверждена тестами на эмуляторе и реальном железе.
Есть тонкости при инсталляции. В частности, UZIX видит разделы жесткого диска BEER IDE как /dev/fd*