LINUX.ORG.RU
ФорумTalks

Мечты о Linux API


3

3

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

Делается это так:

  • .desktop кладём в ~/.local/share/applications
  • иконку к .desktop кладём в ~/.local/share/icons
  • приложение и его библиотеки кладём в ~/.local/share/$VENDOR/$APP
  • типовой shell-скрипт с LD_LIBRARY_PATH кладём в ~/bin
  • приложение пишется так, чтобы не мусорить в хомяк и использовать /tmp, XDG_DATA_DIR, XDG_CONFIG_DIR

И всё работает, и любая DE видит эту программу, и пользователи плачут от радости.

Но не тут-то было. Потому что в Linux нет API с обратной бинарной совместимостью. Потому что LSB — лживый недостандарт, предназначенный исключительно для подсаживания дурачков на вендорную иглу и сколачивания бабла (Ульрих Дреппер, бывший лидер проекта GLIBC, писал об этом ещё в 2005-м; я проверил ситуацию пару дней назад — и увидел, что LSB dll hell проявится даже в таких «правильных» дистрибутивах, как OpenSUSE).

А как бы всё-таки мог выглядеть этот API, который должен быть на любом CD с любым дистрибутивом и должен появляться сразу после установки в любом дистрибутиве? Тут три критерия: минималистичность, привлечение разработчиков с других платформ и самодостаточность.

По моим современным личным представлениям, любая библиотека в идеале выполняет ровно одну из двух задач: предоставляет API или является фреймворком. Библиотека-API минималистична и массштабируема, но требует знания матчасти и множественных проверок кодов возврата: на ней можно написать быстрый и качественный движок (графический, звуковой, рендеринг шрифтов), но использовать такое в приложении напрямую без обёрток может только недалёкий человек. Библиотека-фреймворк, напротив, выполняет общие задачи не задаваясь максимальной гибкостью, но зато с удобством; при этом фреймворк должен либо иметь обратную бинарную совместимость в течение многих лет, либо его надо встраивать в пакет с приложением; примером первого подхода является Qt, примером второго - cocos2d-x.

Исходя из этих представлений, я вижу так:

  • Linux API должен иметь два слоя: первым будет максимально привлекательный фреймворк с обратной совместимостью, вторым будет набор кроссплатформенных массштабируемых сишных библиотек с максимальной гибкостью и производительностью.
  • Первым слоем должен быть Qt5 — программы на нём практически не требуют дополнительных библиотек и легко переносимы на Windows, OSX (а теперь отчасти и на android с iOS). Вкупе с поддержкой QML и javascript это будет сильнее всего привлекать людей к разработке и портированию качественных приложений для/на Linux.
  • Вторым слоем должен быть набор библиотек, позволяющих общаться с любой важной внешней сущностью. Шрифты, работа с OpenGL, создание окна и контекста OpenGL, работа со звуковыми устройствами, открытие URL по клику и вывод уведомлений — все эти штуки приложение не сможет нормально сделать само или с помощью библиотек в своём пакете. Это должен быть внешний API.
  • Во второй слой точно должны попасть: OpenGL, OpenAL, fontconfig и freetype. Библиотеки png и jpeg попадать не обязаны — да, они часто используются, но они не работают с внешней средой и легко могут быть в составе пакета приложения. Надо также разработать библиотеки (а не утилиты командной строки и не dbus-интерфейсы) для работы с DE (appmenu, прогрессбар и badges на иконке приложения в лаунчере, уведомления)
  • За размер пакетов бояться не стоит: zip и bz2 очень хорошо жмут бинарники, link-time optimization и strip вырезают из них лишнее, а наличие Qt5 в первом слое API уже даст кучу крайне лёгких Qt-приложений для узких задач, более опытные и уверенные в себе разработчики смогут сделать относительно лёгкое приложение на втором слое API.

Какие ещё библиотеки должны попасть во второй слой API? И может быть, я что-то упустил из виду?

P.S. Генту идёт в лес. Если вы готовы собирать то же приложение из исходников или оптимизируете работу сервера — флаг вам в руке, но о готовых пакетах с десктопными приложениями забудьте, сами же отказались от этого в своей идеологии.

★★★★

Последнее исправление: quiet_readonly (всего исправлений: 1)

Ответ на: комментарий от Deleted

А вот хороший вопрос, если я поставлю себе Ubuntu с Unity и рядом поставлю GNOME что будет с приложниями? Тот-же nautilus из GNOME потрет патченый из Unity, или в бубунтарепах только патченый лежит? Или они обозвали их по другому?

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

quiet_readonly ★★★★
() автор топика
Ответ на: комментарий от quiet_readonly

2 строки какого то говнотамады это бесспорно очень весомый аргумент.

ya-betmen ★★★★★
()
Ответ на: комментарий от cvs-255

А к чему приводит отход от юниксвея, объяснять надо?

Нет, это же очевидно: к популярности и финансовому успеху.

thesis ★★★★★
()
Ответ на: комментарий от thesis

Извиняюсь за копролалию

Если кому-то удалось продать говно, это не значит что говно продали из-за того, что оно говно, это просто кто-то умеет продавать говно.

PolarFox ★★★★★
()
Ответ на: комментарий от thesis

Заверни говно в блестяжую обертку, на которой написано, что в этой версии в 2 раза меньше поноса и пахнет фиалками. а ну и скажи что это МОДНО.

Deleted
()
Ответ на: комментарий от quiet_readonly

Программы из окружения можно заменить. Или вовсе не пользоваться UnityDE.

ivanlex ★★★★★
()
Последнее исправление: ivanlex (всего исправлений: 1)
Ответ на: комментарий от Deleted

Но почему, почему все заворачивают в блестящие обертки исключительно говно, когда вокруг навалом вкусных бесплатных конфет?

thesis ★★★★★
()
Ответ на: комментарий от PolarFox

Редхат продает не конфеты, а услуги реанимационной бригады.

thesis ★★★★★
()
Ответ на: комментарий от thesis

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

Deleted
()
Ответ на: комментарий от Deleted

А, то есть юниксвей это такой рецепт конфет, получить конфеты по которому пока ни у кого в мире еще не получилось?
Дык это, может, с рецептом что-то не так?

thesis ★★★★★
()
Ответ на: комментарий от thesis

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

Deleted
()

*Зевая* 100500 Мессия, несущий Светоч Истины. Да-да, мой юный друг, до тебя тоже самое немного другими словами уже высказывали 100499 человек. А некоторые от разговоров даже до дела дошли. Догадайся, где они все сейчас.

redgremlin ★★★★★
()
Ответ на: комментарий от Deleted

С рецептом все может и нормально

Да вот уже как-то не верится. Если следуя рецепту ни у кого не получается приготовить хоть что-нибудь, что может составить конкуренцию т.н. «говну» - наверное, это не очень хороший рецепт.

thesis ★★★★★
()
Ответ на: комментарий от mono

а Unity вообще прибита гвоздями к Ubuntu.

В Арче для установки Юнити нужно подключить один репозиторий и набрать одну команду. В Генте есть оверлей для неё (не скажу за его работоспособность). Видимо, не такие уж длинные гвозди.

aidan ★★★★
()
Ответ на: комментарий от redgremlin

Догадайся, где они все сейчас.

Например в компании bitrocks.

quiet_readonly ★★★★
() автор топика
Ответ на: комментарий от quiet_readonly

ТС ни о чем конкретно не говорил. А то что есть исключения, и их довольно много - это правда, я ж не отрицаю. Кроме чтого у некоторых «мажорной» версией называется смена второго номера, а не первого... Короче каждый как хочет так и ...

Jetty ★★★★★
()

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

Убивать.

// Дальше не читал

dexpl ★★★★★
()

собрать кросс-дистрибутивный пакет

А зачем, когда можно собрать пакет для Ubuntu LTS и, если совсем уж большое желание, для какого-нибудь rpm? Все остальные либо подтянутся, либо ваш пакет совсем-совсем никому не нужен.

trex6 ★★★★★
()
Ответ на: комментарий от thesis

А, то есть юниксвей это

Ты вообще неправ: юниксвэй - это, прежде всего - последовательность. Самое главное преимущество его перед подходом виндузятников, макосников и подобных - это то, что не приходится переучиваться, переизобретать каждый раз заново. Не приходило в голову, почему юниксвейные программы написанные тридцать лет назад используются по сей день каждый день, миллионами людей. А программы, написанные под вин31? 98? 2000? ХР?

Какой смысл писать не вечную программу, если можно написать вечную?

pihter ★★★★★
()
Ответ на: комментарий от thesis

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

Проприетарные программы обречены. Все. В любой отрасли, куда приходит опенсорс (не только в ПО) он всегда сначала сливает, потом начинает составлять конкуренцию, потом всякая конкуренция пропадает. Вендекапец неизбежен. Это лишь вопрос времени. Как и копец любой другой закрытой технологии. И эта революция выскочит за пределы компьютерного мира. Если, конечно, интернет будет жить и скайнет нас всех не поубивает

pihter ★★★★★
()
Ответ на: комментарий от Deleted

Уж очень-очень смелое заявление. Особенно оглядываясь на процент установок Ubuntu + Mint.

Пользуюсь Ubuntu последние 3 года, за это время отвык собирать софт ручками практически полностью (раньше был старый ALT Linux и для него многое приходилось собирать самому). Если уж и уходить куда-нибудь с Ubuntu, то собирать свою генту. Но для этого необходима куча свободного времени. Все остальное - полумеры.

При этом Ubuntu LTS (aka Debian) останется кросс-дистрибутивным API, а в генте необходимо будет поддерживать в рабочем состоянии все необходимое для этого. Зачем могут понадобится какие-то другие дистрибутивы я до сих пор не очень хорошо понимаю.

trex6 ★★★★★
()
Ответ на: комментарий от pihter

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

миллионами людей.

каждый день

Ну ты же упорот, ну...

uin ★★★
()
Ответ на: комментарий от pihter

не приходится переучиваться, переизобретать каждый раз заново

Ржал.

юниксвэй - это, прежде всего - последовательность.

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

Самое главное преимущество его перед подходом виндузятников, макосников

О, а расскажи мне о преимуществах дохлого «правильного» юникса над живой «неправильной» макосью, которая, ВНЕЗАПНО, тоже юникс.

thesis ★★★★★
()
Ответ на: комментарий от trex6

Mint готов быть и на Дебиане, собственно.

Пользуюсь Ubuntu последние 3 года, за это время отвык собирать софт ручками практически полностью

А на Дебиане, конечно, я компиляю ядро каждый день, ага %)

При этом Ubuntu LTS (aka Debian) останется кросс-дистрибутивным API

Для этого Убунта не нужна, достаточно Дебиана. Лично мне всё равно чем там они себе занимаются, пока не раскачивают лодку не начинают все эти «мы напишем свой графический сервер». И без этого в Линуксе полно велосипедов.

Deleted
()
Ответ на: комментарий от pihter

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

Ты про /bin/true? Даже там значимый коммит в 2009 году был. Никто не пользуется программами тридцатилетней давности без особой нужды. Десятилетний линукс-софт практически весь не умеет даже юникод.

А программы, написанные под вин31? 98? 2000? ХР?

Используются сотнями миллионов людей ежедневно.

x3al ★★★★★
()
Ответ на: комментарий от pihter

Ты считаешь, что открытый клиент к огороженным сервисам (см. хромобук/андроид) лучше закрытого (вроде blackberry)? Да, тогда вендекапец неизбежен.

x3al ★★★★★
()

А в чём проблема-то? Именно так сделан, например, инсталлятор Prey. 2008 год.

Valkeru ★★★★
()
Ответ на: комментарий от Deleted

Формат пакетов тот же, для X-овых приложений у них будет готовое решение. Пусть пилят свой Mir, может быть что-то у них и выйдет лет через дцать.

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

trex6 ★★★★★
()
Ответ на: комментарий от Deleted

Т.е. остается только зделать для каждого из них бекенд.

Пилите, Шура, пилите.

Пусть Марк пилит, у него все получится.

trex6 ★★★★★
()
Ответ на: комментарий от x3al

Ты про /bin/true? Даже там значимый коммит в 2009 году был. Никто не пользуется программами тридцатилетней давности без особой нужды. Десятилетний линукс-софт практически весь не умеет даже юникод.

Я про TeX какой-нибудь, cp или grep. Хотя я не знаю как давно они написанны, но предполагаю, что не вчера.

Пусть не умел юникод - научили, но алгоритмы менять смысла нет.

Касаемо программ под старые винды - если они и не мертвы, то умрут со сменой апи. А вот юниксвейные не умрут.

pihter ★★★★★
()
Ответ на: комментарий от x3al

Ты считаешь, что открытый клиент к огороженным сервисам (см. хромобук/андроид) лучше закрытого (вроде blackberry)? Да, тогда вендекапец неизбежен.

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

Я просто смертность всего проприетарного в условиях конкуренции с открытым предвещаю.

pihter ★★★★★
()
Ответ на: комментарий от pihter

TeX Live появился во второй половине 90х и не был юзабельным в то время. Это немного не 30 лет назад.

Хотя я не знаю

Сам всё сказал.

Касаемо программ под старые винды - если они и не мертвы, то умрут со сменой апи

Ну и напишут новые. Проблемы в чём?

Ты думаешь, что потеря уникального алгоритма cp убьёт проприетарщину?

Касаемо программ под старые *никсы и прочие — они зачастую уже мертвы тупо потому, что никто их не пропатчил под более-менее современные системы (т.к. некому). Я периодически натыкаюсь на такой софт (зачастую выпущенный в 2009+ году), иногда допиливаю до собираемости, иногда переписываю. В венде/os x ТАКОГО наплевательского отношения к НЕБЕСПЛАТНОМУ труду девелоперов нет. В опенсорсных дистрах — полно.

x3al ★★★★★
()
Ответ на: комментарий от pihter

Касаемо программ под старые винды - если они и не мертвы, то умрут со сменой апи.

Вот только умирать они будут годами, а то и десятками лет, и до часа X будут работать на любой версии Windows независимо от номера и поставщика.

quiet_readonly ★★★★
() автор топика
5 мая 2014 г.

Я тоже об этом мечтаю. Хочу собрать GNOME2 по стандарту LSB, и просто устанавливать его сразу после установки любого дистрибутива Linux. Мне кажется что LSB не недостандарт, что он действительно работает. А софт не появляется потому что никому не хочется писать под GTK2+GLIB+ATK+Pango+Cairo+gnomeui-2+glade-2+gnomevfs-2+Freetype+XML2. Под голые иксы тем более. Вот и получаем Utorrent только с WebUI, клиент Webmoney на Java и ICQ на Adobe AIR. Наверное клиент Steam портировали так долго из-за необходимости переписывания многокода под вышеперечисленное.

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 1)

Не осилил.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.