?

Log in

No account? Create an account
UNG is not GNU - Журнал Витуса. — LiveJournal
[Друзья] [Свежие записи] [Dreamwidth] [Фото] [Тексты] [Друзья Ирины] [Матерные писатели] [Сообщества] [3 круг]
October 1st, 2009
11:50 pm
[User Picture]

[Link]

Previous Entry Share Next Entry
UNG is not GNU
А напишу-ка я флеймогонный пост.

На тему того, что свободный софт перестает быть свободным по чисто техническим ограничениям, я уже писал. И что в этом в частности виноват злобный предатель де Иказа, хотя далеко не только он - тоже.

А теперь о том - что делать. Понятно, что прочитав все что ниже, вы скажете что это проект неподъемный. Ну так четверть века назад Столлману то же самое говорили. А у него - получилось.

Итак, переходим к делу. Я утверждаю что проект GNU как таковой - исчерпал себя. Он утонул в собственной сложности. Когда исходник hello world занимает под 200 строк, не считая вспомогательных библиотек для обеспечения переносимости, требует 10000-строчного скрипта для конфигурирования, а весь дистрибутив hello world - 400 килобайтный архив - так жить нельзя. О какой свободе модификации может идти речь, когда для того, чтобы разобраться как программа выводит одну строчку на экран, требуется читать две сотни строк, а для того чтобы разобраться, как это скомпилировать - несколько десятков тысяч?

Сравните с пятью строчками и однострочным Makefile у Кернигана и Ритчи.

Нет, бывает и хуже. Почитавши некоторые исходники OpenSolaris, я понял что Столлман и его последователи поначалу многое сделали для достижения удобопонятности софта. Но потом пришло поколение де-Иказ и Дрепперов.

В общем, похоже как в том позднесоветском анекдоте про Ленина - надо выезжать в Женеву и начинать все с начала.

Пытаться создать новый проект и еще раз реимплементировать POSIX userland. Начиная с libc. Впрочем, тут ембедщики поработали, и можно попробовать взять за основу uclibc.

Естественно, нужно сразу закладываться на то, что в итоге должна получиться система с GUI. Заменять X11 на 81/2 или какой Оберон я пока мысленно не готов. Опять же сетевая прозрачность - штука полезная.

Поэтому понятие сессии нужно сразу закладывать такое, какое сложилось к концу первого десятилетия XXI века в десктопных системах. Так что сессионная шина сообщений (да и системная) нужна. Впрочем проект человекопонятной замены D-Bus я уже публиковал.

Возможно, начинать новый проект надо не с yet another реимплементации coreutils (хотя до этого дело неизбежно дойдет - я не зря начал с описания GNU hello - это наиболее концентрированная демонстрация всех пороков командно-строчных утилит GNU), а с чего-нибудь типа браузера. Поскольку с браузерами положение сейчас наиболее нетерпимое.

Тем более, если удастся разобрать браузер на кучку компонентов, работающих как отдельные процессы, общающихся между собой по удобопонятным протоколам и обрабатывающих ошибки (вплоть до падения в кору) друг друга без ущерба для user experience, это продемонстрирует, что можно делать сложные вещи простыми, понятными и удобными для модификации.

Остальное будет проще. Только xlib придется повычистить от вызвов abort(). Ибо не дело это - ронять приложение, в которое может пара гигабайт ценных несохраненных данных загружено только потому, что потеряна связь с дисплеем (или даже не потеряна, а просто со шрифтами фигня какая-то).

Собственно, основные принципы, которым должен следовать данный проект, проистекают из статьи Столлмана Opening the software toolbox про которые большая часть opensource программистов успешно забыли.

1. Каждая компонента делает только одну вещь, но делает её хорошо
2. Должно быть легко понять, как вызвать компоненту, чтобы она сделала то, что тебе нужно. Т.е. библиотека с развесистыми API имеет право на существование в исключительных случаях. В остальных - отдельный процесс, общающийся с другими с помощью легко анализируемого протокола межпроцессного взаимодействия - параметры командной строки, сообщения по сессионной/системной шине, имеющие тот же синтаксис командной строки, данные в очевидно понятном формате по пайпу, shared pixmap etc.
3. Если где-то мы предусматриваем не совсем очевидный формат (типа той же shared pixmap) то сначала мы делаем инструмент, позволяющий этот формат посмотреть, и только потом - компоненты
которые делают с этим что-то осмысленное.
4. Любые тулзы автоматической генерации кода (типа скриптов конфигурирования) должны генерировать код, в первую очередь понятный для человека.
5. Никаких врапперов вокруг компилятора, вроде libtool. Лучше отказаться от поддержки нескольких экзотических платформ, или написать для них отдельный makefile, чем оставить админов и программистов всех остальных платформ наедине с необъятными простынями неудобочитаемого кода с пятью уровнями include. Упрощение жизни сборщика ценой усложнения жизни разработчика - это обмен essential liberty на temporal safety. Тот же сборщик вас потом проклянет, когда выяснится что вы не все предусмотрели и ему надо что-то подкрутить. Кстати, возможно от make стоит сразу отказаться, заменив его на какой-нибудь bras.

В общем, система должна быть сдизайнена так, чтобы оставаться свободной, даже если она лицензируется по BSD-лиценизии и половина компонент у вас без исходников. В случае необходимости что-то подкрутить должна оставаться возможность либо сделать враппер вокруг компоненты, либо встроить переходник между двумя закрытыми компонентами.

Tags: ,

(471 comments | Leave a comment)

Comments
 
Page 1 of 3
<<[1] [2] [3] >>
[User Picture]
From:svchost1101
Date:October 1st, 2009 08:45 pm (UTC)
(Link)
А есть ли какие нибудь мысли относительно open hardware?
[User Picture]
From:svchost1101
Date:October 1st, 2009 08:49 pm (UTC)
(Link)
интересуюсь из вопроса о том, что я сейчас пытаюсь создать костыль по возможностям схожий на ARM11, а так как навыков написания БИОС не имеется, то появляется необходимость "сделать всё как у этих взрослых дядей с их линуксом, чтобы он у меня запускался".
И в связи с этим, как я наблюдаю о всё возрастающим масштабом необходимых работ, одному человеку сделать нечто подобное врядли получится.
[User Picture]
From:gabaidulin
Date:October 1st, 2009 08:58 pm (UTC)
(Link)
Про 200 строк явное передергивание. В примере основное место занимают комменты, текстовые данные и функция help :-) Да и язык си сам по себе довольно многословен.

Про libtool. Возможно, но есть тот же cmake. Есть scons.

Добавил бы еще, что не так плохо каждые 10 лет все переписывать заново, хотя бы для того, чтобы внедрить новые идеи и приемы, без оглядки на совместимость :-)
[User Picture]
From:vitus_wagner
Date:October 1st, 2009 09:02 pm (UTC)
(Link)
И cmake, и scons обладают тем же недостатком, что и autotools/libconf - у них внутри слишком много неочевидного тайного знания. Понять ЧТО оно делает, не говоря уж о том, ЗАЧЕМ оно это делает крайне сложно. А нужно, чтобы было легко.
(Deleted comment)
(Deleted comment)
[User Picture]
From:vitus_wagner
Date:October 1st, 2009 09:35 pm (UTC)
(Link)
Будет по крайней мере обсуждение. И может я из этого обсуждения узнаю что-то новое на тему того, как правильно писать программы. А может - не только я.
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
[User Picture]
From:tzirechnoy
Date:October 1st, 2009 09:44 pm (UTC)
(Link)
>Заменять X11 на 81/2 или какой Оберон
>я пока мысленно не готов. Опять же сетевая
>прозрачность - штука полезная.

Сетевой прозрачности в 81/2 и поболее будет.
[User Picture]
From:tzirechnoy
Date:October 1st, 2009 09:46 pm (UTC)
(Link)
А вообще, есть мысль поступить тупее: поставить себе Plan 9. Большую часть вещей, которые я делаю на десктопе, сделать на нём можно. Ну, разве что мозилла не пойдёт, но мне на 85% хватает links2, так что то, что там пойдёт, возможно, тожэ подрядится на многое.
[User Picture]
From:vitus_wagner
Date:October 1st, 2009 10:18 pm (UTC)
(Link)
Вообще насчет plan9 стоит подумать.
[User Picture]
From:duke_igthorn
Date:October 1st, 2009 10:17 pm (UTC)
(Link)
Сознательно ухожу от технических вопросов. Проект неподъемный, потому что:
1. У Столмана - харизма
2. Столман отталкивался от этической программы, техническая програма у него практически отсутствовала (или была вторичной). Этическая программа привлекает кучу народу, не способных оценить технические лозунги
3. Фрисофт так бы игрался в песочнице, если б не пришли ренегаты типа Реймонда и не продали его корпорациям под соусом опенсорца
[User Picture]
From:vitus_wagner
Date:October 1st, 2009 10:21 pm (UTC)
(Link)
А нам нужна куча народу, не способных оценить технические лозунги? На данный момент компьютеров на Земле в тысячи, если не в миллионы раз больше, чем когда Столлман начинал свой проект. Поэтому людей, умеющих с ними обращаться - тоже больше. Может и наберется достаточное количество.
Что касается "Ренегатов типа Реймонда", то они пришли на готовенькое. В этот момент GNU/Linux уже практически ни в чем не уступал, скажем, Solaris-у для десктопных применений. Поскольку как раз в 97 году я использовал для десктопа и то, и другое, могу это утверждать с полной ответственностью.
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
[User Picture]
From:dottedmag
Date:October 1st, 2009 10:32 pm (UTC)
(Link)
coreutils переимплементировать не надо, эмбедщики и там поработали. busybox.
[User Picture]
From:vitus_wagner
Date:October 1st, 2009 10:33 pm (UTC)
(Link)
А он уже tab completion делать научился?
[User Picture]
From:dottedmag
Date:October 1st, 2009 10:32 pm (UTC)
(Link)
Xlib нужно не чистить, а выкидывать и заменять на XCB.
[User Picture]
From:vitus_wagner
Date:October 1st, 2009 10:33 pm (UTC)
(Link)
Чего-чего? Ссылку.
[User Picture]
From:aceler
Date:October 1st, 2009 10:36 pm (UTC)
(Link)
Практические вопросы — драйвера, прикладное ПО. ?
[User Picture]
From:vitus_wagner
Date:October 1st, 2009 10:40 pm (UTC)
(Link)
Очевидно, что очень долго придется сидеть на ядрах, разработанных в существующих проектах. Благо их есть на выбор - Linux, *BSD, MINIX3.
Так что вопрос с драйверами можно пока не затрагивать,

Собственно вся задумка про то, чтобы придумать такой способ писать прикладное ПО, чтобы оно не было монстрообразным и падучим.

[User Picture]
From:aceler
Date:October 1st, 2009 10:44 pm (UTC)
(Link)
> Заметим что микроядро в Hurd было на самом деле нужно не столько по тем техническим соображениям, которые приводил Таннебаум в споре с Линусом, сколько именно из соображений well-defined interfaces, которые позволили бы множеству независимых разработчиков работать над разными подсистемами ядра.

Да, вот это правильно. Если растащить ядро на десяток независимых компонентов, его можно будет как минимум перекраивать по частям, а не как KDE 4.
From:karpion
Date:October 2nd, 2009 11:58 am (UTC)
(Link)
Если растащить ядро на десяток независимых компонентов, то резко снизится эффективность работы. Например, кэширование диска д.б. интегрировано с файловой системой; менеджер RAID-томов тоже надо интегрировать в файловую систему, а не прятать от неё детали реализации дискового пространства.
[User Picture]
From:permea_kra
Date:October 2nd, 2009 02:05 am (UTC)
(Link)
Идея нетипизированных pipe как существенной части IPC вот уже третий год использования вызывает у меня глубокие сомнения. И для меня такой прожект должен начинаться с удобных утилит командной строки. но я правоверный хаскелит и вообще не программист, так что можно не обращать внимания -).
From:gds
Date:October 2nd, 2009 06:04 am (UTC)
(Link)
поддерживаю. Для большинства применений должна быть строгая типизация.
Из базовых типов точно нужны: числа, строки, булевые значения. Из составных типов -- структуры/записи, кортежи, индуктивные типы данных (в том числе списки).
From:dmzlj
Date:October 2nd, 2009 05:06 am (UTC)
(Link)
А зачем тогда POSIX? Может тогда лучше все сделать с чистого листа? Начиная с языка и компилятора. gcc/binutils внутри это ужас, разве плохо было бы сделать какой-нибудь более вменяемый язык с более простым компилятором, и уже от него начинать строить новую систему?
[User Picture]
From:kmmbvnr
Date:October 2nd, 2009 05:59 am (UTC)
(Link)
А что такое "более вменяемый язык"?

Кто ближе всего к "вменяемости" - ObjectiveC, Lisp, Haskell, Python?

А может быть допиленный ATS? Или даже Beep :)
(Deleted comment)
[User Picture]
From:beldmit
Date:October 2nd, 2009 05:47 am (UTC)
(Link)
У меня есть странная идея, но не уверен, что это гвоздь от той стены.

Разница между библиотекой, реализующей функцию, и приложением, ровно эту функцию вызывающей, быть не должно. То есть совсем.

Тогда обвязка до достаточно сложного уровня пишется именно с передачей данных через пайпы в разные стороны. И на каком-нибудь языке, не сильно превосходящем bash по возможностям.
[User Picture]
From:blacklion
Date:October 2nd, 2009 07:00 am (UTC)
(Link)
Разница между библиотекой, реализующей функцию, и приложением, ровно эту функцию вызывающей, быть не должно. То есть совсем.
Это вам скорее в Фантом.

Тогда обвязка до достаточно сложного уровня пишется именно с передачей данных через пайпы в разные стороны. И на каком-нибудь языке, не сильно превосходящем bash по возможностям.
Ой не надо вот только пайпов. Это сплошная сериализация и десиреализация, мы на этом 90% производительности потеряем — свренуть данные в поток байтов, отдать функции, развернуть… В топку.
From:silly_sad
Date:October 2nd, 2009 06:31 am (UTC)
(Link)
если уж вы замахнулись на браузер, то надо замахнуться на ХТМЛ и на яваскрипт. и выжечь их калёным железом.

(если вы внимательно присмотритесь к хтмл) то увидите (у него все тэги утратили смысл (по мере развития box-model) из любого тэга можно цээсэсом сделать любой другой тэг)
и зачем нам тогда такой сложный и путаный и громоздкий язык (если можно составить всю разметку из ровно ОДНОГО тэга, и притом сделать его безымянным, а записывать всё это говно на URT)
[User Picture]
From:blacklion
Date:October 2nd, 2009 06:59 am (UTC)
(Link)
Вообще-то сейчас все нормальные верстальщики верстают семантически, т.е. если оторвать CSS их докумненты останутся вполне прилично вгыляждящими именно благодрая разным тегам.

А JavaScript — вообще отличный язык, фактически Self :) Это такой засланец в мир пхп-программистов — вроде простой, а на самом деле вовсе нет, в хорошем смысле.
[User Picture]
From:blacklion
Date:October 2nd, 2009 06:58 am (UTC)
(Link)
Видел ре-имплементацию autoconf'а на pmake и его стандартных шщаблонах мейк-файлов, объёмом в 5% от autoconf/automake?
[User Picture]
From:vitus_wagner
Date:October 2nd, 2009 07:10 am (UTC)
(Link)
А как там было с удобочитаемостью?
Вообще у cmake и imake есть одно полезное свойство - они не пытаются УГАДАТЬ что-то. Они точно знают что умеет данная система.
Портовая система в *BSD тоже.
My Website Powered by LiveJournal.com