ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Igor Vlasenko <vlasenko@imath.kiev.ua>
To: devel@lists.altlinux.org
Subject: [devel] Угрозы развитию дистрибутива. Пути решения.
Date: Sun, 25 Sep 2011 01:35:21 +0300
Message-ID: <20110924223520.GA20031@dad.imath.kiev.ua> (raw)

Уважаемые коллеги,

хочу поделиться в devel@ своим проектом 
доклада на OSDN-2011 в Киеве, так как тема касается проблем 
развития дистрибутива, и, думаю, будет всем интересна.
Прошу читать и комментировать.

----------------------------------------
<текст доклада>
----------------------------------------

В этом году мне довелось побывать в Обнинске на конференции
разработчиков свободных программ.
К сожалению, мне не удалось лично познакомиться с Алексеем Турбиным,
зато я услышал от коллег о его пессимистическом прогнозе о
будущем многих дистрибутивов.

Алексей Турбин отметил, что число пакетов в нашем дистрибутиве, как и
вообще число Open Source приложений, растет в геометрической
прогрессии. В то же время число активных майнтайнеров в дистрибутиве
скорее колеблется вокруг некоторых постоянных значений, связанных с
плотностью популяции разработчиков и админов.

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

Это аналог теории Томаса Мальтуса применительно к дистрибутивам.

Если посмотреть на дистрибутивы ALT Linux, то тенденция взрывного
роста числа пакетов видна четко.

Master2.2  1780
Master2.4  3226
Compact3.0 4569
branch4.0  6871
branch5.1  9758
Sisyphus  12390

Количество майнтайнеров за это время колебалось в районе 100+ человек.

Пессемистический сценарий вполне возможен. Например,
во времена так и не оформленного в дистрибутив бранча 5.0
были нехорошие тенденции такого рода с протуханием пакетов 
и оттоком майнтайнеров и пользователей.
Тогда ALT Linux справился с ними, и благополучно здравствует.

Но проблема "большее число пакетов требует большего числа ресурсов"
никуда не делась. 

Итак, что же ждет нас в будущем?

<картинка1.jpg>
Death Star is approaching the planet Yavin. 
субтитры:
The rebel base is on the moon on a far side.
The moon with the rebel base will be in range in 30 minutes...
</картинка>

Что же делать, чтобы эта проблема не "выстрелила" в 
критический момент?

Первое - это снижать затраты ресурсов на сопровождение.

Как пример,
Когда-то сборка и пересборка исходного пакета была достаточно сложным 
и кропотливым занятием, отнимавшим заметную долю времени при
сопровождении пакета. Сейчас эти задачи автоматизированы настолько,
что субъективно воспринимаются как атомарные операции.
Репозиторий СПО ``Sisyphus'' может заслуженно гордиться, наверное,
лучшей в своем классе системой сборки hasher, а также своим
автоматизированным incoming.

В то же время обновление исходного пакета при выходе новой версии 
у нас в ALTLinux Team все еще является традиционно ручной задачей, 
оттягивающей на себя значительную часть времени при сопровождении 
пакетов. Это слишком расточительно: участников ALTLinux Team не так
много по сравнению с числом исходных пакетов, что приводит к тому,
что много пакетов недостаточно хорошо сопровождаются: они отстают
по версиям, годами не исправляются простые ошибки.

В этом случае снизить затраты на сопровождение позволят роботы обновления.

Пример: робот обновления пакетов perl.
интересная вещь: робот, который может самостоятельно
обновлять пакеты по cron,
снимая с майнтайнера 90% времени на работы. Оставшиеся
10% -- это разборки с пакетами, для которых у робота возникли проблемы
(не хватило зависимостей, отвалился патч, и т.д.).
Его можно развернуть в песочнице и управлять  через acl.

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

<картинка2.jpg>
/Luke in the fighter, hearing Obivan's voice/
субтитры:
Luke! Use the Source!
Remember, the Source will be with you. Always.
</картинка>


Вернемся к истокам.
Спросим себя. "В чем сила, брат?".

Наша сила в Open Source. Пользуясь Open Source, продвинутый пользователь
Вася Пупкин за 20 минут может изготовить для своей супруги Маши
персональный офисный пакет, который при запуске поздравит Машу с днем
рождения, и ему для этого не нужны будут миллионы долларов и десятки
лет разработки.
 
Проблема "большее число пакетов требует большего числа ресурсов"
проявляет себя потому, что разные дистрибутивы вынужденно дублируют
усилия друг друга.
С этой же проблемой связана и мечта об универсальном пакете.

Универсальный пакет - пакет, который можно собрать и установить в
почти любой дистрибутив. Мечта о универсальном пакете появилась вместе
с первыми дистрибутивами. 
Почему упаковщики пакетов дублируют усилия друг друга, ведь пакеты это Open Source?
Почему не смог родиться универсальный пакет?

Напрашивающийся вывод - сохранять совместимость похоронил 
не одну сотню дистрибутивов-форков. Иногда эта стратегия работает, в основном
для нишевых дистрибутивов и небольших изменений.
Возвращаясь к примеру с продвинутым пользователем Васей Пупкиным,
можно взять дистрибутив, поменять обои и выпустить диск с "Pupkin Live! (tm)".
Но когда приходится поддерживать особенности, которые по каким-то
причинам в базовый дистрибутив не принимаются (например, устаревшие
особенности ранее вышедшего дистрибутива), то возникают проблемы.

Необходимость вносить изменения вновь и вновь может оказаться слишком
дорогой платой за совместимость.

Но почему это так?
и почему упаковщики пакетов дублируют усилия друг друга? 

= Дистрибутивы как диалекты.

Свободное программное обеспечение в целом характеризуется большой
гибкостью и широкими возможностями адаптации и повторного
использования. Для задач совместной распределенной разработки
программного обеспечения создано большое число различных
инструментальных средств. Эти  инструментальные средства сохраняют
свою высокую эффективность при распределенной работе над пакетами в
рамках одного репозитария, но резко снижают свою эффективность при
пересечении границ дистрибутивов. К примеру, выполнение инструкций
сборки для исходных пакетов одной и той же программы, например, в
Debian и ALT Linux, может давать полностью пофайлово идентичные
бинарные пакеты; при этом, если, скажем, в пакет для  Debian будут
впоследствии внесены некоторые полезные изменения, то эти изменения,
скорее всего, не заведомо не получится перенести в исходный пакет той
же программы, но предназначенный для одного из репозиториев  ALT Linux
с помощью стандартных утилит diff (1) и patch (1). 

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

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

Да, исходные пакеты открыты, и майнтайнеры пакетов в разных
дистрибутивах смотрят в пакеты друг друга.
Но проблема в отсутствии необходимых инструментов для переноса наработок
между дистрибутивами. 

Вспомним, какой толчок в разработке ядра Linux произошел 
при переезде на распределенную систему управления версиями.

Как уже говорилась, логика diff (1) и patch (1)
плохо работает при пересечении границ дистрибутивов.
Какие же инструменты нужны?

= Конвертирование пакетов как альтернатива универсальному пакету.

Конвертер магически конвертирует затраченные усилия по сопровождению
пакета в одном дистрибутиве в усилия по сопровожению
пакета в другом дистрибутиве.

Конечно, конверсия тоже далеко не бесплатна, но сопровождать один конвертер
гораздо, гораздо, гораздо дешевле, чем 5-10 тысяч пакетов, которые он
может сопровождать.

Конвертировать можно 
* из других дистрибутивов; 
* из специализированных репозиториев вроде CPAN, HackageDB, Ruby Gems, PyPI;
Конвертируя, можно получить в итоге 
"В Греции есть все", "One ring rule them all" дистрибутив.

В конверсии сила открытого программного обеспечения проявляет себя полностью.

Как это работает на практике?

В рамках разработки системы автоматизированного импорта и
сопровождения программных пакетов srpmimport ведется разработка
прототипа программного комплекса автоматизации портирования и
сопровождения программных пакетов из репозитория СПО «fedora» в
нестабильной ветки репозитория СПО «Sisyphus» fcimport.

Среди других успешных опытов по автоматизации сопровождения исходных
пакетов надо назвать проекты autoports, cronbuild, CPAN update,
а также их сопутствующую инфраструктуру.
Проект autoports во время испытательного срока собрал более 2000
пакетов для репозитория 5.1.
В рамках проекта fcimport сейчас сопровождается более 700 пакетов
репозитория СПО ``Sisyphus'', при чем это только тестовое множество,
используемое при разработке fcimport.
В рамках проекта JPPimport сейчас сопровождается более 1000 java пакетов
репозитория СПО ``Sisyphus''.

Цель этих экспериментов -- исследовать возможность автоматизации
сопровождения пакета. hasher у нас полностью автоматизировал процесс
сборки пакета. сопровождение пакета -- более сложная задача,
но прогресс в этом направлении позволяет освободить майнтайнера
от механических работ, чтобы у него было больше времени для
высокоуровневых задач, таких, как исправление ошибок и подгонка
под стандарты качества дистрибутива.

В отличие от hasher, задачи подготовки и обновления исходного пакета
невозможно полностью автоматизировать из-за того, что сами
репозитории программного обеспечения, политики упаковки и инструменты
сборки находятся в процессе постоянного изменения.
Поэтому автоматизированная сборка никогда не сможет полностью
вытеснить ручную. Для нее достаточно, чтобы она была статистически
успешной с хорошей вероятностью, чтобы ручные работы выполнялись
только тогда, когда они действительно необходимы.

= Аспектно-ориентированное сопровождение пакетов.

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

Как уже говорилось,
когда приходится поддерживать особенности, которые по каким-то
причинам в базовый дистрибутив не принимаются (например, устаревшие
особенности ранее вышедшего дистрибутива), то возникают проблемы,
связанные с тем, что необходимо вносить изменения вновь и вновь.

По этой причине система
автоматизированного импорта и сопровождения программных пакетов
srpmimport использует аспектно-ориентированный подход к трансляции и
сопровождению исходных программных пакетов.

При аспектно-ориентированном программировании у нас есть основной код
и "аспектный", с инструкциями для инструмента связывания, 
в какие места основного кода должен быть вставлен ("связан") аспектный код.

Тот же подход можно применить и при сопровождении конвертируемых или
параллельно сопровождаемых пакетов.

Опишем необходимые нам изменения в виде "аспекта", т.е. выпишем 
наши изменения как набор инструкций на языке редактирования пакетов.
Это позволяет автоматизировать задачу повторного внесения изменений.

srpmimport использует реализацию языка редактирования пакетов в
библиотеке RPM::Source::Editor языка perl.

-- 

Dr. Igor Vlasenko
--------------------
Topology Department
Institute of Math
Kiev, Ukraine


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



             reply	other threads:[~2011-09-24 22:35 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-24 22:35 Igor Vlasenko [this message]
2011-09-25  0:28 ` Michael Pozhidaev
2011-09-25 21:44   ` Igor Vlasenko
2011-09-25  6:34 ` Hihin Ruslan
2011-09-25 11:27   ` Michael Shigorin
2011-09-25 11:39     ` Aleksey Avdeev
2011-09-25 11:44       ` Aleksey Avdeev
2011-09-25 11:56         ` Hihin Ruslan
2011-09-26 17:33     ` Vitaly Lipatov
2011-09-26 17:45       ` Denis  Medvedev
2011-09-26 19:30       ` Michael Shigorin
2011-10-09 19:23         ` Vitaly Lipatov
2011-10-09 19:32           ` Paul Wolneykien
2011-10-09 20:15             ` [devel] интеграция с OBS Dmitry V. Levin
2011-10-09 20:24               ` Paul Wolneykien
2011-10-09 20:28                 ` Paul Wolneykien
2011-10-11 15:31                 ` Michael Shigorin
2011-10-14 17:36                 ` Радик Юсупов
2011-10-15 17:10                   ` Paul Wolneykien
2011-11-14 19:30                     ` Paul Wolneykien
2011-11-14 22:40                       ` Igor Vlasenko
2011-11-15  8:19                         ` Michael Shigorin
2011-10-10 13:40             ` [devel] Угрозы развитию дистрибутива. Пути решения Denis  Medvedev
2011-10-10 15:03             ` Denis  Medvedev
2011-09-25 22:04   ` Igor Vlasenko
2011-09-26  4:17     ` Hihin Ruslan
2011-09-26  5:09       ` REAL
2011-09-26  6:31     ` Boris Savelev
2011-09-25 11:27 ` Michael Shigorin
2011-09-25 19:47 ` Vitaly Kuznetsov
2011-09-25 21:25   ` Michael Shigorin
2011-09-26  5:16   ` Денис Смирнов
2011-09-26 10:47     ` Ildar Mulyukov
2011-09-27  1:20       ` Денис Смирнов
2011-09-29  7:29     ` Мал Скрылёв
2011-09-29  9:55       ` Igor Vlasenko
2011-10-01  5:53         ` Мал Скрылёв
2011-10-01  7:34           ` Денис Смирнов
2011-10-01 15:08             ` Aleksey Avdeev
2011-10-02  7:24               ` Денис Смирнов
2011-10-02 10:22                 ` Aleksey Avdeev
2011-10-03 13:09                   ` Igor Vlasenko
2011-10-03 13:20                     ` Aleksey Avdeev
2011-10-03 13:35                       ` Igor Vlasenko
2011-10-03 16:02                         ` Андрей Черепанов
2011-10-03 16:25                           ` Aleksey Avdeev
2011-10-03 16:41                             ` Igor Vlasenko
2011-10-04 16:16                         ` Денис Смирнов
2011-10-04 17:31                           ` Igor Vlasenko
2011-10-02 18:16                 ` Igor Vlasenko
2011-10-03  2:58                   ` Денис Смирнов
2011-10-03  9:11                     ` Paul Wolneykien
2011-10-03 11:55                       ` Денис Смирнов
2011-10-03 13:11                         ` Paul Wolneykien
2011-10-04 16:14                           ` Денис Смирнов
2011-10-04 17:38                             ` [devel] Угрозы развитию дистрибутива. Пути решения: gear-subsystem Paul Wolneykien
2011-10-04 17:50                               ` Денис Смирнов
2011-10-04 18:33                                 ` Paul Wolneykien
2011-10-05 12:13                                   ` Денис Смирнов
2011-10-03 13:08                 ` [devel] Угрозы развитию дистрибутива. Пути решения Igor Vlasenko
2011-10-04 20:53               ` [devel] Муть moodle в cronbild (was: Угрозы развитию дистрибутива. Пути решения.) Aleksey Avdeev
2011-10-04 21:36                 ` [devel] Муть moodle в cronbild Aleksey Avdeev
2011-10-04 21:54                   ` Aleksey Avdeev
2011-10-04 22:04                 ` [devel] Путь moodle в cronbild (was: Муть moodle в cronbild) Aleksey Avdeev
2011-10-05  9:49                   ` Igor Vlasenko
2011-10-05 10:56                     ` [devel] Путь moodle в cronbild Aleksey Avdeev
2011-10-05 14:09                       ` Aleksey Avdeev
2011-10-05  9:43                 ` [devel] Муть moodle в cronbild (was: Угрозы развитию дистрибутива. Пути решения.) Igor Vlasenko
2011-10-05 10:49                   ` Igor Vlasenko
2011-10-01 19:40           ` [devel] Угрозы развитию дистрибутива. Пути решения Igor Vlasenko
2011-10-01 20:32           ` [devel] Пробел в архитектуре gear репозиториев, мешающий совместной работе Igor Vlasenko
2011-10-02  7:22             ` Денис Смирнов
2011-10-02 18:15               ` Igor Vlasenko
2011-10-03  2:52                 ` Денис Смирнов
2011-09-29 11:28       ` [devel] Угрозы развитию дистрибутива. Пути решения Денис Смирнов
2011-09-25 22:11 ` Paul Wolneykien
2011-09-26 14:36   ` Denis  Medvedev
2011-09-26 15:38     ` Michael Shigorin
2011-09-26 15:50       ` Paul Wolneykien
2011-09-27 11:42     ` Igor Vlasenko
2011-09-27 13:34       ` Egor Vyscrebentsov
2011-09-29 13:35         ` Денис Смирнов

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110924223520.GA20031@dad.imath.kiev.ua \
    --to=vlasenko@imath.kiev.ua \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git