Пользователь
0,0
рейтинг
17 июня 2013 в 11:29

Разработка → Поколение, затерянное на базаре перевод

«Качество появляется только тогда, когда кто-нибудь несёт ответственность лично».
— Фредерик Ф. Брукс



Привет, хабр!

Предлагаю вашему вниманию вольный перевод эссе "A Generation Lost in the Bazaar" Пола-Хеннинга Кампа, повествующего нам о печальной судьбе поколения IT-профессионалов, выросших в период бума доткомов, а также о фундаментальных проблемах в UNIX, напрямую влияющих на качество и портабельность ПО. Обо всём по порядку.

Собор и базар


В своей заметке автор использует метафору собора и базара, описанную в эссе Эрика Рэймонда "Собор и базар", я нахожу уместным привести отрывок из текста признанного перевода эссе:

---начало цитаты---

Linux — удивительная система. Кто бы мог подумать, что несколько тысяч разработчиков, разбросанных по всей планете и сотрудничающих только через Интернет, смогут создать операционную систему мирового класса. Я во всяком случае так не думал. К тому времени как Linux оказалась в поле моего зрения в начале 1993 года, я уже около десяти лет участвовал в разработке UNIX'a и открытых программ.

Linux перевернула мои представления о том, что я знаю. Я считал, что основным в разработке небольших инструментов для UNIX'a является их быстрое проектирование и эволюционирующее программирование в течение многих лет. И в то же время я верил, что по мере того как сложность разработки увеличивается, необходим более централизованный подход. Я верил, что разработка самого сложного программного обеспечения (например, операционных систем или просто больших инструментов, таких как Emacs) должна быть подобна строительству собора. Такие программы должны создаваться мастерами-индивидуалистами или небольшими группами волшебников, работающими в строгой изоляции, не допуская преждевременных бета-версий.

Меня очень удивил стиль разработки Линуса Торвальдса — частый выпуск релизов, доступность всех исходных текстов и терпимость к разнородным программам. Это совсем непохоже на размеренное строительство собора, сообщество Linux скорее напоминает шумный базар, с множеством различных подходов и направлений. То, что на этом базаре рождается согласованная стабильная операционная система, кажется чудом из чудес.
Меня потрясло, что этот базарный стиль работает и работает хорошо. Я не только участвовал в разработке индивидуальных проектов, но также пытался понять, почему в мире Linux'a не только не возникает беспорядка, но напротив он движется вперед со скоростью, которой строители собора могут только позавидовать.

К середине 1996 года мне показалось, что я начал понимать. Судьба предоставила мне прекрасный шанс проверить мою теорию. Это был проект разработки открытого программного обеспечения, который я сознательно провел в базарном стиле. Успех этого проекта превзошел все ожидания.

---конец цитаты---
---начало перевода---

Введение


Книга Эрика Рэймонда "Собор и базар", вышедшая тринадцать лет назад, пополнила наш словарный запас новой терминологией. Помимо этого, она предсказывала конец каскадной модели разработки ПО и закат эры крупных софтверных компаний, благодаря возникшему в народе движению за Свободное Программное Обеспечение.

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

Другая книжка, которая оказалось у меня в домике на берегу моря этим летом, также навевает думы. Она явно глубже книги Рэймонда (кстати, положительно ссылается на него), это Frederick P. Brooks’s — «The Design of Design». Причём сколько раз я кивал головой в знак согласия, наслаждаясь стилем письма Брукса и его умением подать материал, столько же раз я впадал в депрессию от прочитанного.

Эра доткомов


Тринадцать лет назад был достигнут апогей эры доткомов 90-х, когда каждый школьник был веб-программистом или каждый отчисленный из колледжа уже владел своим веб-стартапом. Я получил истинное наслаждение, когда пробовал обучать этих салаг фундаментальным профессиональным навыкам — созданию скриптов автоматического деплоя, системам контроля версий и так далее. Ностальгия, конечно — на самом деле было не до веселья.
Мы не можем отрицать, что вся эра доткомов явилась настоящим бедствием для IT/CS индустрии в целом и для UNIX в частности. Под удар попало качество программных продуктов.

У меня нет точных сведений, насколько IT индустрия увеличилась в объёмах на протяжении периода доткомов. Моя личная оценка такова, если считать количество всплывших на поверхность профессий, что наша ниша выросла на два порядка, то есть более чем на 10 000%.

Влюбиться в компьютеры просто — практически любой может накодить рабочую программу, ровно как практически любой может прибить гвоздём одну доску к другой, за несколько попыток уж точно. Проблема в том, что доля таких вот непрофессионально прибитых друг к другу досок крайне мала, если рассматривать рынок домашней мебели. А чтобы перейти от двух досок к прилично выглядящему комплекту стульев или к встроенному шкафу требуются талант, практика и образование. Те самые (10 000% — 100%) = 9 900% дополнительных процентов не имели ни опыта, ни образования, когда они пришли в IT отрасль. И до того, как у них появился шанс получить это, вечеринка закончилась и большинство осталось вообще без работы.

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

Базарный стиль, за который так ратовал Э. Рэймонд, "Просто запили", противопоставляемый грамотно спроектированным соборам из пре-доткомовского периода, не сгинул после краха доткомов, к сожалению, и сегодня UNIX скоротечно тонет под собственной тяжестью.

UNIX


Я обновил свой ноутбук. Вот уже как 18 лет у меня на нём стоит dev-версия FreeBSD и сборка минималистичной рабочей среды из исходников занимает весь день, потому что оно пытается выстроить логику и архитектуру из анархического мусора, именуемого Э. Рэймондом как базар.

Издалека кажется, что коллекция портов FreeBSD это нечто вроде карты для базара, чтобы пользователям FreeBSD было легче найти что-либо. На практике же эта «карта» состоит, в данный момент, из 22 198 файлов с кратким описанием каждой палатки на базаре — несколько строк о том, что внутри имеется и где почитать про это подробнее. Ещё имеется 23 214 make-файлов, говорящих нам, что делать с каждой софтиной из тех, что мы найдём в палатках. Эти make-файлы пытаются информировать нас о возможных сценариях, различных выборочных опциях и их значениях по-умолчанию. Карта поставляется вместе с 24 400 patch-файлами, чтобы сгладить кривизну предлагаемых ручных поделок. Хотя, на самом деле, большинство этих патчей используется для исправления проблем переносимости ПО.

Наконец, эта карта услужливо говорит нам, что если мы хотим установить www/firefox, то сначала нужно выкачать devel/nspr, security/nss, databases/sqlite3 и так далее. Как только мы найдём их при помощи карты, а затем поищем их зависимости, а затем рекурсивно получим список зависимостей их зависимостей, то у нас наберётся список покупок на 122 пакета, которые нам обязательно нужны, прежде чем можно будет получить www/firefox.



Мы все любим компонентно-ориентированный подход к разработке ПО. Но даже в самом тривиальном случае, однако, методология повторного использования кода полностью чужеродна на базаре: программы в коллекции портов FreeBSD содержат как минимум 1 342 копипасты криптографических алгоритмов.

Если бы подобное игнорирование методологии повторного использования воплотилось бы в виде механизма самодостаточных и независимых пакетов с ПО, тогда был бы компромисс между дубликацией кода и лёгкостью управления пакетами. Но это явно не наш случай — пакеты образуют запутанную паутину из бессистемных зависимостей, что приводит к ещё большей дубликации кода и бесполезной трате ресурсов.

Вот ироничный пример: библиотека Сэма Лиффера graphics/libtiff лежит на пути к www/firefox, являясь одним из тех 122 пакетов в общей цепочке зависимостей. В то время как целевая программа — веб-браузер Firefox — не умеет отображать TIFF картинки image. Я не пытался выяснить, по каким причинам 10 пакетов из 122 требуют Perl и 7 требуют Python; причём один из них, devel/glib20, требует оба языка, даже не могу представить, зачем.

Далее по списку… здесь имеет место Принцип Питера, который звучит как «В иерархической системе любой работник поднимается до уровня своей некомпетентности», а глобально его можно сформулировать так: «Любая хорошо работающая вещь или идея будет использоваться во всё более сложных условиях, пока не станет причиной катастрофы». В программной инжененрии используется частный случай — «Умирающий проект, мало-помалу становящийся слишком сложным для того, чтобы его понимали собственные же разработчики». Вот видите, нам нужны 3 различные версии make, макропроцессор (m4), ассемблер и куча других интересных пакетов. В конце пищевой цепочки, так сказать, находится инструмент libtool, который призван скрыть тот факт, что в UNIX нет стандартизированного метода создания динамических библиотек (shared libraries).

Вместо того, чтобы стандартизировать этот метод для всех никсов — например, реализовать в виде одного флага для команды ld(1) — с участием Принципа Питера это вылилось в отдельную компетенцию libtool. Причём в данном случае этот принцип ощутимо хорошо приложился — исходный код для devel/libtool содержит 414 740 строк. Половина этого кода — тесты, что в целом похвально, но на деле это просто последствия Принципа Питера: тесты искусно разведывают функциональность сложной системы с целью выявить проблемы, которые вообще не должны были возникать.

Что ещё более досадно, 31 085 из тех строчек кода — нечитаемый корявый shell-скрипт, называется configure. Идея в том, что этот configure скрипт выполняет примерно 200 автоматических тестов, чтобы пользователь не был обременён ручными разборками с libtool. Это пипец бестолковая идея, которая была сполна окритикована ещё в 80-х, когда она только появилась. Бестолковая потому, что она позволяет исходному коду претендовать на якобы портабельность, прикрываясь configure скриптом как фасадом, вместо того, чтобы на самом деле обеспечить качественную портабельность.
Абсурдно, что идея с configure выжила.

В 1980 мы видели несколько реализаций UNIX: Cray-1s с поддержкой 24-битных указателей, Amdahl UTS (UNIX для IBM mainframe), целый букет более-менее грамотных реализаций SysV+BSD от производителей миникомпьютеров, недо-UNIX поделки от компаний вроде Data General, даже полноценный клон UNIX — Coherent от компании Mark Williams.

Configure скрипты того времени писались от руки и выполняли задачи вроде выяснения — это BSD- или SysV-подобный UNIX, чтобы затем скопировать подходящий Makefile и, может быть, парочку .h в нужное место. Позже configure скрипты стали более амбициозными, что уже издалека можно распознать как прецендент для Принципа Питера. Но вместо того, чтобы стандартизировать UNIX и исключить необходимость этих скриптов, какой-то умник написал программу autoconf, чтобы автоматически генерировать configure-скрипты.

Сегодняшние UNIX/Posix-образные системы, даже если учитывать версию IBM z/OS mainframe, с точки зрения наблюдателя из 1980 практически одинаковы. До сих пор 31 085 строчек кода configure скрипта для libtool проверяют наличие <sys/stat.h> и <stdlib.h> не смотря на то, что даже те никсы, в которых их не хватало, не имели достаточно памяти, чтобы запустить libtool; или места на диске, чтобы уместить 16 Мб исходного кода libtool.

Как же так случилось?


Ну, по причинам, которые никогда никого не волновали, программа autoconf была написана на допотопном языке макросов m4, что привело к такому внешнему вид тестов:



Само собой разумеется, адекватные программисты никогда бы не пожелали добровольно копаться в этом, даже если бы у них был навык, поэтому эти скрипты для autoconf создаются методом копипасты, часто оказываясь затерянными среди черезмерно жирных стандартных макросов, покрывающих «стандартные тесты», о которых я упомянул выше.
Да, те самые тесты, проверяющие наличие проблем совместимости, с которыми никто не сталкивался уже лет 20.

Это также объясняет, почему libtool проверяет не менее чем 26 различных имён компиляторов Fortran, которых в моей системе просто нет, а затем тратит ещё 26 тестов, чтобы выяснить, какие из этих 26 несуществующих компиляторов поддерживают флаг -g.

Это печальная реальность базара, восхваляемого Рэймондом в своей книге. Кучка старых прогнивших насквозь хаков, бесконечно скопипащенных поколением невежд а-ля «IT профессионалы». Можно прокричать им в ухо «IT архитектура!», но они всё равно не услышат.

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

Одно из великолепных высказываний Брукса — «Качество появляется только тогда, когда кто-нибудь несёт ответственность лично». Я удивлён, что Брукс не приводит UNIX в качестве примера к этому высказыванию, ведь мы можем с почти хирургической точностью определить момент, когда UNIX начал фрагментироваться — в начале 90-х AT&T выделила UNIX и продала все права на него компании Novell, тем самым забрав систему у её архитекторов. (Денис Ритчи сравнил эту сделку с продажей души за батон хлеба — прим. переводчика).

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

Это печальная ирония, конечно. Те, кому посвящена книга Брукса «Design of Design», найдут её совершенно непостижимой. Ну а для тех товарищей, кто хоть раз задумывался о том, что использование макросов m4 для конфигурации autoconf для генерации shell-скрипта для проверки наличия 26 компиляторов Fortran с целью собрать веб-браузер — это как-то немного через жопу, Брукс предложил хорошо аргументированную надежду, что у нас есть шанс всё исправить.

---конец перевода---

Шанс всё исправить




UPD: Мне по всем каналам приходят советы по улучшению перевода и исправлению ошибок в тексте, я выражаю благодарность всем тем, кто нашёл время сделать это. Спасибо.
~Xlab
Перевод: Poul-Henning Kamp
Максим Куприянов @Xlab
карма
22,5
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (74)

  • +13
    У всех все работает, у него не работает, и ктот-то в этом виноват.
    Нет я абсолютно согласен что надо развивать абсолютно новые
    системы сборки, пакетов и графические сервера, оконные системы и все тому подобное.

    Но в тоже время есть хороший так бородоатый анекдот:

    Сын подходит к папе-программисту и спрашивает, а почему солнце всходит на востоке, а заходит на западе?
    Папа, не отрываясь от компьютера,
    — Что, действительно восходит на востоке?
    — Да.
    — А заходит на западе?
    — Да.
    — И что, каждый день?
    — Да.
    — Тогда ради бога ничего не трогай.
    • +31
      Статья как раз о том, что «работоспособность» — не единственный критерий оценки.
      • +1
        Согласен на все 100%! Например есть программа, и программист «сэкономил» полдня своей работы на оптимизации. Теперь пользователи тратят на несколько минут в день больше времени. Каждый день. Каждый пользователь (а их тысячи).

        «Не ну а чо? РАБОТАЕТ ЖЕ!»
        • +1
          Видимо в ТЗ не оговорили скорость работы приложения, соотвественно программист и не стал заниматься оптимизацией.
          • 0
            Скорее всего просто программист такой. Я видел джавистов, которые вместо того, чтобы чинить утечки, просто докупали память и удивлялись, когда им говорили про оптимизации
            • 0
              Программисты все ленивые в той или иной степени, по себе знаю, надо точнее задачи указывать, тогда не надо будет планки памяти докупать и смотреть на тормозящее приложение. Зачем оптимизировать и тратить время/деньги, если в ТЗ не указано что приложение должно летать на первом пентиуме. Но в крайности тоже впадать не стоит и если hello world томозит на современной машине и тратить пару гигов памяти, то у меня плохие новости о ваших программистах.
              • 0
                Ну это уже от задачи зависит. Одно дело корпоративный софт, под который может докупаться необходимое оборудование. Другое дело десктопные приложения, которые могут запускаться на чем угодно. В первом случае оптимизация не нужна, во втором — обязательна.
    • +15
      Я в первый раз когда услышал этот анекдот, решил что буду рассказывать это про сисадминов. Ибо программисты как раз скажут «А давайте зарефакторим!».
      • 0
        угу, у сисадминов даж поговорка такая есть — «работает — не ремонтируй!»
        про прогеров не знаю но м.б.
        • 0
          Программист программисту рознь… Года 4-5 назад я бы сказал про рефакторинг, а нынче — работает и лучше не трогать, но обновлять/дополнять по мере необходимости надо. Рефакториг — это трата кучи времени. Удобнее разбивать крупные проекты на логические не связанные особо между собой блоки и потихоньку улучшать их, не влияя на всю систему в целом.
        • 0
          Один мой коллега всегда говорил — «не чини, оно само сломается» =)
  • +38
    «Шанс всё исправить» ©

    image
    • +2
      Картинка не совсем подходит, ведь вся печаль в том, что сейчас вообще нет ниодного стандарта. Разве что привычки.
    • +9
      «Ubuntu развивает собственный формат пакетов для установки сторонних приложений»;

      как раз про них, да
  • +23
    Внезапно, autoconf с проверками stdlib.h и т.д. не раз помогал мне разобраться с проблемами при работе с mingw. Вот вам и 20 лет «все юниксы умеют». Все юниксы умеют — а windows — нет.
    • –1
      Тогда, соответственно, можно выкидывать тесты, когда более-менее очевиден результат их исполнения, типа
      if [ $(uname) = 'Linux' ]; then

      elif [ $(uname -o) = 'Cygwin' ]; then

      else

      fi
      • +5
        У автора ещё есть заметка, более ранняя и более грубая (бомбануло).
        www.varnish-cache.org/docs/2.1/phk/autocrap.html — «Did you call them autocrap tools ?»

        Он как раз и говорит, что когда-нибудь выпилит эти автотулзы автох*цы, оставив лишь достаточное uname -s
        • +1
          Одного uname недостаточно, к сожалению. С другой стороны, configure-файлы постоянно мешают переносу программ с одной платформы на другую.
          • +1
            ЕМНИП, configure сами генерируются обычно. из configure.ac.
            • 0
              Только в случае использования autoconf.
              • 0
                Для подавляющего количества более-менее популярных программ это так. Стандартное ./configure; make; make install
                • 0
                  Кстати, в последнее время это все чаще cmake. && make && make install.
                • 0
                  Хорошо если так, а то ещё aclocal --install --force когда с макросами проблемки.
                • +3
                  Во, в 2011 писал один незамысловатый мануал, идеальный пример анархии.

                  ~$ git clone git://gitorious.org/vala-toys/vala-toys.git
                  ~$ cd vala-toys
                  
                  # Начинается уличная магия, потому что автор VTG -- редиска.
                  
                  # Без ChangeLog не будет работать automake
                  ~$ touch ChangeLog
                  
                  # Ручками создадим правильный 'po/Makefile.am'
                  ~$ echo -e "# INTLTOOL_MAKEFILE" > po/Makefile.am
                  
                  # И поправим путь в 'configure.ac'
                  ~$ sed -i -e "s|po/Makefile.in|po/Makefile|" configure.ac
                  
                  # Генерируем конфиг
                  ~$ aclocal && autoconf
                  
                  # Чиним & генерируем Makeфайлы
                  ~$ automake --add-missing
                  
                  # Дальше всё пучком
                  ~$ PKG_CONFIG_PATH=/Users/xlab/gtk/inst/lib/pkgconfig/:/usr/local/lib/pkgconfig/ CFLAGS="-arch i386 -I /Users/xlab/gtk/inst/include" ./configure --disable-vtg-plugin
                  ~$ make -j4
                  ~$ sudo make install
                  
      • +3
        По-моему, мы вот-вот изобретём макроязык для генерации макросов для autoconf.
        • 0
          qmake генерирует сразу Makefile, так что уже не изобретём. Пройденная тема ;)
          • 0
            Всегда можно сделать еще.
          • 0
            qmake, кстати, потихоньку пытаются закопать. Ещё пока Qt было у нокии они начали продвигать CMake…
      • +1
        Внезапно, это mingw, а не cygwin.
    • 0
      Вот не знаю что я делаю неправильно, но у меня под виндой mingw вообще без проблем работает.
  • +2
    Автор цитаты в начале статьи все-таки Фредерик Филлипс Брукс, правильней будет Фредерик Ф. Брукс
    • 0
      (действительно исправил П. на Ф.)
  • +6
    Причем здесь вообще autotools? Разве не поколение этого самого «собора» их написало?

    И что плохого в том, что firefox требует libtiff? Он же не напрямую требует, а через цепочку типа firefox -> gtk -> libtiff. Места на жестком диске нынче всем хватает, так почему бы не установить все пакеты с максимальной функциональностью? То, что автор собирает всю систему из исходников вместо бинарных пакетов, — его личные проблемы.
    • +4
      Причем здесь вообще autotools? Разве не поколение этого самого «собора» их написало?

      Проблема не в том, кто написал. Проблема в том, что использование этого костыля превратилось в норму. Т.е. все признают, что это бред, но до сих пор никто не решился исправить, потому что «работает и ладно». Даже Netscape, к примеру, прежде чем стать Mozilla, был переписан с нуля.

      Места на жестком диске нынче всем хватает, так почему бы не установить все пакеты с максимальной функциональностью?

      Отвечу цитатой от автора:
      Если бы подобное игнорирование методологии повторного использования воплотилось бы в виде механизма самодостаточных и независимых пакетов с ПО, тогда был бы компромисс между дубликацией кода и лёгкостью управления пакетами. Но это явно не наш случай — пакеты образуют запутанную паутину из бессистемных зависимостей, что приводит к ещё большей дубликации кода и бесполезной трате ресурсов.
      • –1
        Так автор ратует за базар или собор? :)
        • +3
          За базар ратовал Рэймонд. Этот явно против базара, но

          Matt, My point is not that there are no cathedrals today, but that people don't recognize them as such or see any value in them.
          philip andrew, Mark and others: I'm not arguing that cathedrals is a better solution, they are certainly not without their own kind of problems. What I'm pointing out that is people like @iain don't even know what they are in the first place.

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

      • +1
        Любая система — в той или иной мере костыль. Autotools — не самый ужасный костыль из существующих, если разобраться, и не такой уж и «бред». И почему вы говорите, что никто не решится исправить? Существуют альтернативные системы сборки (cmake и прочие), и вполне хорошо себя чувствуют.

        Если бы подобное игнорирование методологии повторного использования...

        Не понимаю, где здесь игнорирование методологии повторного использования?
        • +5
          Autotools — не самый ужасный костыль из существующих
          Аууууумммм… спорно. Во всяком случае, я конечно не хочу страдать из-за солидарности с автором оригинального опуса, но моё личное мнение частично совпадает, потому что вдоволь наигрался со всем этим сам.

          CMake генерирует Makefile. С общепризнанными проблемами make можно ознакомиться по ссылкам в начале этой статьи: habrahabr.ru/post/144127/ (статья про QBS).

          Не понимаю, где здесь игнорирование методологии повторного использования?
          Игнорирование было про 1 342 копипасты криптографических алгоритмов, а цитату я привёл в тему изолированных пакетов. Раз нам пофиг на место на диске, то можно было бы сделать как в OS X — изолированные пакеты со своими копиями библиотек. Это бы избавило нас от кучи проблем с совместимостью и упростило бы процесс управления пакетами.
          • +2
            CMake генерирует Makefile. С общепризнанными проблемами make можно ознакомиться по ссылкам в начале этой статьи: habrahabr.ru/post/144127/ (статья про QBS).


            Я в курсе проблем make, спасибо. У любой системы сборки есть проблемы, и идеальной системы никогда не будет. Или вы думаете, что переписав все с нуля, у вас таковая получится? Максимализм в сфере разработки ПО обычно не приводит к положительным результатам.

            Игнорирование было про 1 342 копипасты криптографических алгоритмов, а цитату я привёл в тему изолированных пакетов. Раз нам пофиг на место на диске, то можно было бы сделать как в OS X — изолированные пакеты со своими копиями библиотек.


            Вот только не надо бросаться из крайности в крайность.

            Про 1342 копипасты криптоалгоритмов: наверняка речь про какие-нибудь простые хеш-функции. Реализация MD5 или SHA256 занимает около сотни строк, и линковаться с отдельной динамической библиотекой только ради того, чтобы уметь вычислять хеш, не очень целесообразно. И вряд ли вам когда-либо понадобится обновить версию такой библиотеки — MD5 он и есть MD5, нечего там обновлять.

            Согласитесь, есть разница между копированием себе в проект 100-строчной функции, вычисляющей MD5-хеш, и включением в пакет своей версии библиотеки Gtk3. Никто не предлагает делать последнее.

            • +1
              Вот теперь я с вами согласен.
            • +1
              По хорошему, такая функция должна вкомпиливаться в каждый проект, берясь из одного общего исходника напрямую при компиляции. Без динамически линкуемых библиотек…
              • 0
                Не нужно ничего брать из «общего исходника». Для этого статические библиотеки есть.
                • 0
                  Можно и так это назвать
          • 0
            А можно Вам возразить? :)
            CMake генерирует не только Makefile:
            % cmake --help | grep -A15 Generators
            Generators

            The following generators are available on this platform:
            Ninja = Generates build.ninja files (experimental).
            Unix Makefiles = Generates standard UNIX makefiles.
            CodeBlocks — Ninja = Generates CodeBlocks project files.
            CodeBlocks — Unix Makefiles = Generates CodeBlocks project files.
            Eclipse CDT4 — Ninja = Generates Eclipse CDT 4.0 project files.
            Eclipse CDT4 — Unix Makefiles
            = Generates Eclipse CDT 4.0 project files.
            KDevelop3 = Generates KDevelop 3 project files.
            KDevelop3 — Unix Makefiles = Generates KDevelop 3 project files.

            Например, Ninja обещает быть идеальной билдсистемой, но на данный момент — не то, чтобы очень популярен.
      • 0
        Проблема в том, что никто не может решить, что теперь все должно собираться с помощью X. В разное время было множество систем сборок: make, imake, cmake, qmake. Наверняка я еще много чего не вспомнил.
    • +1
      Проблема в том, что некоторые утилиты требует других компонентов, которые им совершенно не надо.
      И в результате монстр типа Firefox обрастает сотнями зависимостей, из которых треть НЕ используется.
      • 0
        Треть — не такие уж и большие накладные расходы. Веб-браузер — действительно очень сложная система, и на мой взгляд, такой длинный список зависимостей вполне оправдан.
      • +1
        В Gentoo для этого есть USE-флаги, чтобы отсеивать ненужные зависимости или наоборот включать отключенные по умолчанию. Однако ж и там частенько бывают проблемы с конфликтами версий и циркулярными зависимостями.
    • +6
      Расскажите эмбедщикам, что у них тоже оказывается места хватает.
      • +3
        Так у них и дистрибутивы специализированные, о них речи здесь не идет.
  • –4
    Не нравится autoconf — перепиши её.
    Только потом про поддержку своей программы не забывай.
    • +2
      Смех в том, что версии autoconf бывают разные и иной раз совместимости между ними нет — то макросы отваливаются, то ещё что.
      .___.
    • +3
      И в результате имеем на рабочей системе кучу версий этого самого autoconf-а
  • +4
    Мир вообще не идеален, и многие стандарты являются стандартами просто потому что — помните же про космос и ширину лошадиной задницы?

    А еще можно вспомнить про архитектуру x86, которая вообще костыль на костыле. Ну и что? Нас поработили ARMы?
    • +10
      image
    • +4
      >А еще можно вспомнить про архитектуру x86, которая вообще костыль на костыле. Ну и что? Нас поработили ARMы?

      А это смотря как считать. Если по общему количеству элекстронно-вычислительных устройств, то думаю да, уже поработили.
      • 0
        А если по известности среди хомячков, то, увы :)
        • +1
          Порабощенные вовсе не обязаны знать о том, что их поработили. Наоборот, так получается намного проще и эффективнее.
  • +8
    Деннис Ритчи поразил своим ответом, ответ батьки. Двумя библейскими цитатами, из Нового и Старого заветов, не в бровь а в глаз.
  • +3
    Здорово же написано. :) Хочется читать Брукса и думать.

    p.s. как-то мне надо было собрать утилиты для работы с osm данными. Выглядело это следующим образом:
    wget -O - http://m.m.i24.cc/osmfilter.c | cc -x c - -O3 -o osmfilter
    wget -O - http://m.m.i24.cc/osmconvert.c | cc -x c - -lz -O3 -o osmconvert
    wget -O - http://m.m.i24.cc/osmupdate.c | cc -x c - -o osmupdate
    
  • –1
    В начале статьи — цитата про
    Linux — удивительная система. Бла-бла-бла Linux.


    Дальше идет текст автора про установленную у него dev-версию FreeBSD. У меня одного диссонанс?
    • +2
      У вас одного, потому что перед цитатой про Linux указано следующее:
      В своей заметке автор использует метафору собора и базара, описанную в эссе Эрика Рэймонда «Собор и базар», я нахожу уместным привести отрывок из текста признанного перевода эссе:
      Короче говоря, я вставил отрывок другой книги другого чувака, на которого ссылался автор неоднократно.
  • 0
    Это главный недостаток OpenSource — его крайне сложно стандартизировать. Потому что разработчиков масса, каждый тянет одеяло на себя, а исходники открыты, и нет никакой возможности навязать всем единое мнение (в случае чего несогласные могут состряпать форк).
    Именно поэтому кривая, корявая технология, но с единым хозяином, достаточно сильным, чтобы продавить своё технологическое видение, многократно лучше архитектурно красивой технологии, но с кучей быстро меняющихся владельцев или вообще бесхозной.
    • +1
      Проблема появилась еще до становления движения за открытое обеспечение.
      POSIX — то что должно бы стандартизировать на самом деле узаконило 1000 костылей и несовместимостей реализаций Unix между собой, а Linux чтобы иметь возможность переисспользовать уже существующие наработки, должен был большую часть этого стандарта и сообтветственно костылей переисспользовать.
  • +15
    Основной тезис статьи можно сформулировать коротко: «надо отвечать за базар!»
    • +18
      Внезапно :D
      И тезис Брукса подстраивается — «Качество появляется только тогда, когда кто-нибудь отвечает за базар лично».
  • +7
    С точки зрения «здравой, критической, логики» статья — просто эпическое нечто!

    Во-первых, господин Брукс занимается уж слишком неприкрытой софистикой. И порой эта софистика настолько «топорна», что просто бросается в глаза. Вот скажите, как?! Как простите, это понимать сие утверждение:

    > Мы не можем отрицать, что вся эра доткомов явилась настоящим бедствием для IT/CS индустрии в целом и для UNIX в частности. Под удар попало качество программных продуктов.

    Даже школьнику, если у него «в порядке с логикой» известно: «После чего-то – не значит вследствие чего-то». И неужели «умный дядька» считает читателей настолько тупыми?

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

    Вот, например, армия всяких «менеджеров» и «маркетологов», пытающаяся управлять технологическим процессом software-developmentа, в котором они нифига не понимают? Чем не причина падения качества?

    А модные технологии так называемого «экстремального программирования» разве не причина? Да, в теории мы красиво и громко декларируем «готовность подстраиваться под любые изменения требований заказчика», а на практике мы умышленно погружаем проект в состояние «бесконечных доделок», служащих только для одного — высасывания по-максимуму бюджета из заказчика. И скажите мне, положа руку на сердце, уважаемые «экстремальные программисты», разве это не так ;)

    А незнание поговорки «скупой платит дважды» (aka привет «индусскому говнокоду») — не причина?

    Я могу привести еще пару десятков причин… Но Брукс говорит, что качество падает потому что… потому что… оно начало падать еще в дотком-эру! И вообще, обратите внимание, сначала громко упоминает «базар», а потом плавно «соскакивает с темы» (!)

    Далее, Брукс пытается пытается читателя «водить за нос», но делает это слишком неуклюже, подкидывая кучу логически слабо-связанных фактов, расчитанных только для того, чтобы произвести у читателя «эмоциональный отклик». (А у параноика в голове сразу же звенит звоночек: налицо психологическое манипулирование, причем грубое и неумелое).

    Но, если попытаться прочитать статью не «эмоционально», а логически, то видно, что автор порой сам себе противоречит. Сначала он жалуется на «ад зависимостей» (типа, ай-яй-яй, такой-сякой firefox тянет за собой аж целых 122 пакета во FreeBSD), а потом тут же яростно критикует «копипасту». И кстати, что за «однобокая подача фактов» — приводит пример из FreeBSD, но почему-то стесняется сказать о том, что есть и успешные примеры решений подобных вещей, например в Gentoo.

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

    А вообще, СТОП, кто-нибудь обьяснит, какая вообще _логическая_ _связь_ между «застрявшим на базаре поколением», с которого Брукс начал свой рассказ, и в которое он записал все программерское-айтишное население от 50 до 20 лет и особенности работы autoconf-а? Кстати, а что с темой «качества ПО» — то же самое — сначала «громкий вброс», а затем мутный уход от темы?

    Не знаю как у вас, у меня с первых строк возник вопрос: а «на чью мельницу воду льет» автор? Читая статью, я просто ждал, когда же он наконец начнет «впаривать», когда же наконец, прозвучит «покупайте наших слонов»;)

    И вот, подконец, (прочитав всю охинею в которой терятся логическая нить) [торжественно звучат фанфары] и оказывается, по мнению Брукса, «Шанс ВСЁ Исправить» — это ВНЕЗАПНО новый формат пакетов Ubuntu а еще QT! Получается прямо таки «серебрянная пуля» способная Исправить ВСЕ.

    Не знаю как Вам, дорогие хабраюзеры, но мне очень хочется спросить у господина Брукса: Если новый формат пакетов Ubuntu, настолько «чудотворный», что способен даже исправить все-все последствия «шальных девяностых» «эры темного доткома», то может быть он и от хронического гайморита помогает (если «новый формат Ubuntu-пакетов вместе с QT принимать три раза в день до еды»)?

    • +6
      Брукс здесь не при чём, автор сего опуса — Poul-Henning Kamp.
      (это я на всякий случай пояснил)

      А вообще да, с темы на тему скачет, я специально заголовки сам придумал, чтобы читатели не упоролись от полёта мысли.
    • +2
      и оказывается, по мнению Брукса, «Шанс ВСЁ Исправить» — это ВНЕЗАПНО новый формат пакетов Ubuntu а еще QT!
      Чуть чуть внимательнее посмотрите концовку — там Пол говорит, что с точки зрения Брукса у нас не всё потеряно. Затем перевод заканчивается и я дописал от себя абзац с двумя ссылками, которые появились в интернете совсем недавно. На мой взгляд, это отличная иллюстарция того самого шанса исправить ад сборок и ад зависимостей.
      • +3
        Новый формат пакетов не более чем еще один формат пакетов, а на qt разве пишут без зависимостей?
        • +3
          Новый формат пакетов не более чем еще один формат пакетов
          Это невежество. Если статья на OpenNet не очень чётко объясняет суть, то вот на хабре писали про это в более простой форме и разница налицо. habrahabr.ru/post/179751/

          а на qt разве пишут без зависимостей?
          Речь не о самих зависимостях, а о способе подготовки к линковке с ними.
  • +5
    А кто-нибудь кроме меня читал Мифический человеко-месяц (Брукса)? Прекрасная книга! (простите за оффтоп)
    • 0
      Я читал. Прекрасная книга. Несмотря на ее почтенный возраст, проблемы в разработке ПО остались те же самые, причём к ним добавились новые.
  • –1
    Эх, батенька, не понимаете вы смысла фразы «UNIX-way»… Вот из-за такого непонимания и получается всякий ужас вроде systemd и бубунто-пакетных менеджеров, что мало-помалу приближает так называемый «линуксокапец» и делает единственным светом в окошке BSD (которую некоторые уже давно для себя закопали).

    Кстати, autotools — действительно тормозное и устаревшее поделие, cmake намного удобней!

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.