-
Я пишу небольшой набор открытых и свободных coreutils (небольшой проект, не такой фичастый, как GNU coreutils) для POSIX-совместимых ОС. Проект называется escu(сокращение от Extremelly Small CoreUtils). Писать начал, когда пожелав выучиться системному программированию по исходникам GNU Coreutils, но не смог разобраться в spaghetti code и решил их переписать согласно спецификациям The OpenGroup.
Уже есть утилиты: basename, chroot, dirname, false, head, link, ln, logname, ls, mkfifo, mv, pwd, test, true, tty, uname, unlink, yes. Многие из них уже полностью POSIX-совместимы. Я использую системные вызовы для снижения накладных расходов, а также стараюсь писать максимально простой код для облегчения понимания новичками.
Проект нацелен на максимальную переносимость, поэтому при написании используются только возможности стандартной библиотеки языка C, а для сборки будут использоваться только POSIX-совместимые make, компилятор языка C и командная оболочка.
Релизы будут выпускаться тогда, когда они будут готовы, за исключением багфиксов.
Комментарии, предложения и патчи приветствуются!
Исходный код: github.com
Replies (186)
-
@Annoynimous, Не, реально не понимаю — что не так? Одному тонко, другой про стиль переспрашивает? Кто-то скажет, что не так?
-
@Dorif, Hello everybody out there using minix —
I’m doing a (free) operating system (just a hobby, won’t be big and
professional like gnu) for 386(486) AT clones. This has been brewing
since april, and is starting to get ready. I’d like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things). -
@Annoynimous, Ввиду простоты кода — в образовательных целях, например. Ввиду компактности и нересурсоёмкости — может делить нишу с бизибоксом и подобным. Т.к. всё ж стараюсь делать полнофункциональным — может и в установленных системах юзаться(скорее в BSD, ибо лицензия CDDL).
-
@Dorif, Plan 9 простой и компактный. Heirloom стандартный и простой. Ты на них вообще смотрел?
-
@Annoynimous, Честно говоря — нет, ибо в выдаче на ohloh их не было.
-
@Dorif, Странный выбор поисковика. В гугле первым линком на coreutils alternatives есть busybox и heirloom.
-
@Annoynimous, Ну, просто ohloh сразу примеры кода выдаёт — удобно.
-
@4DA, Ошибаешься. Создание базовых утилит(корутилзы), командных интерпретаторов, интерпретаторов и компиляторов вообще, текстовых редакторов, пейджеров и т.п., что must have каждый UNIX — это тоже подпадает под системщину. Не хочу сразу начинать с самых низкоуровневых частей системного программирования — тогда наверняка я напишу такую хрень, что самого оторопь возьмёт. Лучше я пойду по нисходящему методу — от баовых утилит, к текстовым редакторам, интерпретаторам и т.д.
-
@Dorif, Корутилзы никоим образом не взаимодействуют с железом.
-
@Dorif, А, то есть всё, что описывает POSIX, — объект системного программирования?
-
@Dorif, Plan 9 является юникс-подобной системой, но никоим образом не совместима с POSIX.
-
@Annoynimous, Он описывает базовые утилиты, наличие которых обязательно в любой системе UNIX и за счёт которых обеспечивается некоторая совместимость между ними. Т.е стандартизирует часть "платформы для запуска плиложений". На голом ядре ты не много запустишь.
-
@Dorif, И причём тут системное программирование?
На голом ядре я дохуя всего запущу. Например, любой статически слинкованный бинарник. -
@Annoynimous, Plan9- post-UNIX. Это другое. К тому же: частично всё же совместима. Плюс: SUS и POSIX на данный момент — одно и то же.
-
@Dorif, Ну и да, Plan 9 в гораздо большей степени UNIX-подобная, чем какой-нибудь GNU/Linux, начиная с философии и заканчивая исходным кодом.
-
@Annoynimous, Делает, ибо не совместима с SUS/POSIX. А право называться юникс-подобной имеет система, соответствующая этим стандартам.
-
@Dorif, Какое-то странное у тебя определение. Из той же книжки взял?
A Unix-like (sometimes referred to as UN*X or *nix) operating system is one that behaves in a manner similar to a Unix system, while not necessarily conforming to or being certified to any version of the Single UNIX Specification.
-
@Annoynimous, Если мне не изменяет память, подобность или не подобность определяется соответствием SUS/POSIX, а не философией и т.д.
-
@Annoynimous, Блин, я уже говорил, что Single Unix Specification и POSIX сейчас одно и то же. Читай сайт The OpenGroup
-
-
@Annoynimous, Plan9 ведёт себя как юникс только в очень ограниченном плане. Если это считать юникс-подобной ОС, давайте и венду признаем за неё, чё. Причём без UNIX Services for Windows
-
@4DA, Это хак на уровне интерпретатора, насколько я помню. Как в баше /dev/tcp вместо полноценной файловой системы, описывающей взаимодействия по ip, как в Plan 9.
-
@Annoynimous, это не важно :3. юникс — это не внутренности, это интерфейсы, идеи и философия.
-
@4DA, О том-то и речь, что в интерфейсе ФС, предоставляемом программам, нет никакого PRN.
-
@Annoynimous, Смотря какие утилиты. Некоторые из них взаимодействуют. Почитай у The OpenGroup. К тому же: корутилзы формируют часть той самой платформы для запуска приложений.
-
@Dorif, Например, какие?
Ты "and" в определении пропустил, я полагаю. -
@Annoynimous, Компиляторы, ассемблер, дизассемблер, — все они зависимы от железа.
-
@Annoynimous, Без инита. Инит до systemd представлял собой набор шелл-скриптов и утилит.
-
@Dorif, Это и есть без инита.
Инит до systemd представлял собой набор шелл-скриптов и утилит.
Ты совсем наркоман? -
@Annoynimous, А, забыл. я ж сам так делал для recovery опции в загрузчике. Но если нет командного интерпретатора — как собиаешься запустить ещё какую-нибудь программу, если понадобится? Перезагружать с новой опцией? А чем ты эту опцию укажешь? Текстовый редактор запустить и отредактировать нужный конфиг не можешь — тебе недоступен командный интерпретатор.
-
@Dorif, Алсо, мне в моём KDE4 и без командного интерпретатора неплохо живётся.
-
@Annoynimous, Что ты будешь делать, если захочешь запустить другую программу? На голом ядре. Без интерпретатора, корутилзов, инита, текстовых редакторов. Как ты укажешь новую опцию init=/foo/bar ? И ЧЕМ ты её укажешь?
-
@4DA, Я пытаюсь втолковать вам то, что ОС — не не голое ядро. Это программный комплекс. Включающий в себя базовое пользовательское окружение. Иначе это бы звалось не операционной СИСТЕМОЙ, а операционной ПРОГРАММОЙ или планировщиком системного времени(OS/360 ближе к планировщикам, чем к ОС, всё, что было до неё вообще под ОС никак не подпадает).
-
@Dorif, Кореутилсы не нужны, настоящие мужчины (вроде меня) пишут ядра — github.com/122 · Reply
-
@4DA, И возможность запуска шелл-скриптов? *Баша и другого командного интерпретатора у тебя нет.
И кстати, с той же англовики, та же статья про системное ПО: It also provides a platform to run high-level system software and application software. Высокоуровневое ПО — это, например, шелл-скрипты. Без корутилзов они будут ограничены небольшим набором команд, встроенных в интерпретатор. И даже en.wikipedia.org и ru.wikipedia.org так ии иначе утверждают, что базовые утилиты. формирующие пользовательское окружение относятся к системному ПО, ибо без них работа юзера была бы очень неудобной или невозможной -
@4DA, Ещё раз: платформа — это не набор "ядро, ассемблер, компилятор", платформа — это то, что позволит запустить и поддерживать работу чего-то полезного на этом ядре, позволять работать компилятору и ассемблеру. Кстати: ассемблер и компилятор — это только утилиты, имеющие непосредственную связь с железом А попробуйте запустить на голом ядре динамически слинкованную прогу — не получится. Линковщика нема. Попробуйте отладить или прочтать дамп без дебаггера, шестнадцатеричного или текстового редактора — тоже облом. Примеры можно продолжить.
-
@4DA, Было время, когда что-то полезное делали вообще набором машинных комманд вручную. Теоретически даж с голым ядром поизвращаться можно и что-то родить. Но для этого и существует базовое пользовательское окружение, состоящее, кроме средств разработки ещё из командного интерпретатора, корутилзов и текстового редактора
-
@Dorif, и? platform = набор системных библиотек и программ (кстати и линкер сюда же), которые абстрагируют железа и предоставляют сервисы ОС, и к которым прикладные программы могут обращаться для своей работы. твой редактор и корутилзы (без баша и средств разработки) — обычные прикладные программы.
-
@tzirechnoy, Дык это первое,что объясняют в рунете любому человеку же!
-
@tzirechnoy, Ну, я думал это настолько очевидно, что и спрашивать не надо.)
-
@sany, Да-да. if ( (p = getenv("PWD")) && ( (*p != '/') ...
-
@tzirechnoy, Например? И не через системный вызов(сожрёт процессорное время на переключение контекста) и чтоб не раздувало получающийся бинарь.
-
@Dorif, Не понял — что например? Например как доавляет несколько kb? Возьми dietlibc, собери статически puts("hello.\n") и сравни с printf("hello\n");
И я совсем ничего не понял про системный вызов. -
@tzirechnoy, Кстати, фиг там — по умолчанию gcc преобразует printf("hello") в puts("hello"). То есть надо или лезть за ключом, который отключает интеллект или компилировать printf("hello%d.\n", 1);