LINUX.ORG.RU

Архитектура опен сурс программ не должна зависеть от GUI-библиотек (gtk, qt и подобные)

 , , , ,


0

3

Появилась у меня мысль. Что программы на открытом исходном коде не должны быть привязаны к какой либо ГУИ-библиотеке. Т.к. положение этих ГУИ-библиотек (и их владельцев) позволяет им диктовать и портить чужие программы. Пример это файловые диалоги открытия и сохранения файлов. Которые намеренно не фиксятся владальцами проекта Gnome. А альтернативные файловые диалоги по простому не прикрутишь. В идеале правильная разработка опен сурс программ должна вести по архитектуре без привязки к какой либо ГУИ-библиотеки. Типа написание бакенда отдельно от фронтенда. Большинство программистов этого не понимают и создают будущие проблемы для своих программ. Или в линуксе должна быть какаята прослойка между программами и гуи-библиотеками. Хотя есть Wxwidgets. А Wxwidgets поддерживает только С++. Но должно быть чтото более универсальное. Поддерживающее все языки (большинство популярных).

К подобным плохим библиотекам также относятся DE-библиотеки такие как Gnome, KDE. Которые обманчивао создают иллюзию упрощения разработки програм. Но в результате привязывают программиста к своим ГУИ-библиотекам. Примером является хорошая программа Ktorrent которая теперь сильно привязана к KDE.

А вы что думаете ? Я прав или нет ?

Какие ещё средства существуют для написания программ не привязанных к одной ГУИ-библиотеке ? Чтобы не было типа как вендорлока.

Поведение ГУИ библиотек напоминает мне поведение проприетарщиков с их вендор локом.

Привязка к поставщику (англ. vendor lock-in, proprietary lock-in, customer lock-in, «барьер для смены поставщика») — бизнес-модель, в которой устанавливается зависимость потребителя от продуктов и услуг одного поставщика, намеренно создаются осложнения для смены поставщика из‑за высоких затрат на переход.

Поставщики заинтересованы намеренно создавать замыкание для завоевания большой доли рынка, что иногда приводит к появлению монополии и «стандартов де-факто».

https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%B0_%D0%BA_%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D1%89%D0%B8%D0%BA%D1%83

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

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

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

Да, там патчи интегрированы. Собственно, на этом ГОГ и живёт, буржуям проще заплатить пару баксов, чем ручками всё делать. А большинство старых игр без шаманства на новых виндах не запускаются.

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

Винда занимает 30 гигов, большую часть из которых составляют старые библиотеки совместимости.

Установочный образ Windows XP занимает 600 метров, Установочный образ Windows 7 – 3 гига. Внимание, вопрос: что занимает остальные гигабайты 10-ки, и сколько можно распространять эту чушь?

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

Установочный образ Windows 7 – 3 гига

А установленная она занимает 20. А 10ка уже больше 30.

и сколько можно распространять эту чушь?

Вот и я удивляюсь. Чушь уже почти скончалась от издевательств, а ты продолжаешь её пороть. Ну нельзя же быть настолько садистом.

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

У меня прямо сейчас есть два образа vbox, винда 10 и ubuntu, оба используется для доступа к ресурсам корпоративной сети (по работе). Кроме браузеров и блобов для работы с токеном, sslvpn и цитрикс на них ничего нет:

7,7G	./ubuntu-workstation
23G	./Windows-Workstation

С виндой у меня не срослось, я узнал что windows 10 не умеет в NAT.

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

Умеет, придется поофтопить:

enable-windowsoptionalfeature -featurename microsoft-hyper-v -online -all

new-netnat -name nat -internalipinterfaceaddressprefix 192.168.1.0/24

xtouqh
()

Хороший вброс. Качественный.

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

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

tommy ★★★★★
()

Пример это файловые диалоги открытия и сохранения файлов. Которые намеренно не фиксятся владальцами проекта Gnome. А альтернативные файловые диалоги по простому не прикрутишь.

Подожди, но раз это опенсурс, то тебе не запрещают форкнуть гном и исправить файловые диалоги под себя, или ты хочешь на готовенькое и бесплатно? ✋🏼

kogoth
()

В идеале правильная разработка опен сурс программ должна вести по архитектуре без привязки к какой либо ГУИ-библиотеки. Типа написание бакенда отдельно от фронтенда.

По сути вы предлагаете сделать ещё один тулкит, который является обёрткой над другими тулкитами.

Хотя есть Wxwidgets. А Wxwidgets поддерживает только С++. Но должно быть чтото более универсальное. Поддерживающее все языки (большинство популярных).

В разных языках разная система типов, ABI и т.д. так что универсального решения не получится.

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

Общее правило: если ты гадёнышь хочешь что-то новое, то делаешь это РЯДОМ с существующим, а НЕ ВМЕСТО него!

Неистово плюсую!

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

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

Старый код на помойку, и не нужно беспокоиться о совместимости.

Млляяя….это какой-то…позор? (с)

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

Ну, те же Tk или wx не ломают.

Ну на них и пишут сейчас не так много как на культях с гытыками.

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

Общее правило: если ты гадёнышь хочешь что-то новое, то делаешь это РЯДОМ с существующим, а НЕ ВМЕСТО него!

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

На самом деле «Общее правило» вытекает из Общей Цели:
любые изменения в общеупотребимых библиотеках не должны влиять на способность старых программ компилироваться, все старые коды должны компилироваться без правок.

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

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

cмузихлёб должен быть наказан штрафом, а библиотека откачена назад

И штаны красные отнять, и вернуть желтые. И перед эцилоппом приседать вдвое дольше. Год. Ибонефиг!

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

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

Разрабы СПО не должны менять свои программы по каждому чиху смузихлёбов из Gtk.

Смузихлёбов, ломающих API - в биореактор!

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

Первый раз сломал API - штраф в виде 2х зарплат, второй раз сломал - штраф в 5 зарплат и пинком под зад из команды. Эти повадки нужно выжигать калёным железом.

В винде старый WinAPI по 20 лет работает. Это не мешает добавлять новый функционал, не трогая старый. Поэтому старые виндо-программы работают без перекомпиляции по 20 лет.

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

Кстати о тулкитах. FLTK сейчас хоть кто-нибудь где-нибудь использует? Может стоит откопать? Там как раз последние лет 20 никто ничего не менял)

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

FLTK сейчас хоть кто-нибудь где-нибудь использует?

Не проверял, но думаю, через X-Window и сейчас работает.

Проблема в том, что диверсанты ломают не только GUI, но все подсистемы, в том числе пересаживают толпу на Wayland, который как и Gtk так же постоянно ломают.

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

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

Кстати о тулкитах. FLTK сейчас хоть кто-нибудь где-нибудь использует? Может стоит откопать? Там как раз последние лет 20 никто ничего не менял)

Я использую.

Поверь мне, он ужасен. Ты не захочешь на нём писать.

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

не умеет в файловые диалоги

Внеси свой вклад в опенсорс.

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

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

Угу. С завтрашнего дня вырезаем весь GTK со всеми программами на нём. Пользователи уйдут с дистрибутива послезавтра.

Если считать «API должно быть обратно-совместимо как минимум 15 лет» верным, то следить должны программисты. Это же им надо! И переставать использовать библиотеки-нарушители.

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

Разрабы СПО не должны менять свои программы по каждому чиху смузихлёбов из Gtk.

Так кто мешает не менять эти самые программы? Предоставлять пользователям с пометкой libgtk <= a.b.c, newer are broken.

Если таких наберётся хотя бы 30%, ломание библиотеки прекратится (потому что новыми версиями иначе никто пользоваться не будет).

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

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

А к старым программам относятся те, которые вместо include <errno.h> писали extern int errno ?

А те, который используют memcpy на пересекающихся участках памяти?

А те, которые используют особенности реализации UB в старых компиляторах?

Или надо как разработчикам Microsoft добавлять проверку «если файл называется simcity.exe, тогда free() ничего не делает» чтобы предотвратить падение программы из-за чтения памяти после освобождения?

monk ★★★★★
()

Примером является хорошая программа Ktorrent которая теперь сильно привязана к KDE. Если она «сильно привязана к KDE», то почему его можно установить в Гайке?

anonymous
()

Большую часть Шиндовс занимают драйверы устройств. Если очистить несколько раз диск С, повыбирав там всякое и всё, то пустая инсталяция, без доп.софта в виде офисов и прочего, занимает 15ГБ.

Как я помню, макОС занимает аналогично, в районе 10ГБ, или то мне показалось?

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

Разрабы СПО не должны

Ну так-то они никому ничего не должны в принципе.

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

https://drewdevault.com/2020/09/25/A-story-of-two-libcs.html

But, I’m going to go out on a limb here: maybe isalnum should never cause a program to segfault no matter what input you give it. Maybe because the spec says you can does not mean you should. Maybe, just maybe, the behavior of this function should not depend on five macros, whether or not you’re using a C++ compiler, the endianness of your machine, a look-up table, thread-local storage, and two pointer dereferences.

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

В идеале правильная разработка опен сурс программ должна вести по архитектуре без привязки к какой либо ГУИ-библиотеки.

Это сильно зависит от того, что за программа.

Если какая-нибудь гуйня к БД (каталогизатор там какой-нибудь, он вполне может быть опенсорсным), то там доля ГУИ в коде может приближаться к 99% (вместе с запросами к БД, они тоже будут скармливаться какой-то библиотеке), и «архитектура» идёт лесом. Точнее, архитектура там будет, но совсем другая.

Если, наоборот, это (например) распознавалка изображений с прошаренными алгоритмами — да, однозначно имеет смысл выделить ядро, отвязанное от GUI.

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

Gnome и KDE — это не библиотеки, это DE.

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

Ну, те же Tk или wx не ломают.

Wx ломают постоянно. Причём в минорных версиях.

Вот пример несовместимых изменений в 3.1 по сравнению с 3.0: https://github.com/wxWidgets/wxWidgets/blob/v3.1.4/docs/changes.txt

2.8 c 2.6 тоже огромные изменения.

2.8 и 3.0 тоже, но там хоть понятно, первая циферка изменилась…

Я хоть на wx и не писал, но новости читал, и в gtk ломающих изменений гораздо меньше в минорных релизах, можно сказать почти нет.

Tk тоже ломают, но не сильно. Просто там сейчас версии редко выходят. А так между 8.4(последняя версия для Win98) и 8.6 разница есть, и кое-где нужны if. (Немного писал на Python tkinter, tcl вообще не устанавливал)

Tcl/Tk 8.4.0 released (2002/09/18)

Tcl/Tk 8.5.0 (2007/12/20)

Tcl/Tk 8.6 (2012/12/20)
fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 3)
Ответ на: комментарий от EXL

Нужны файловые диалоги на HTML+JavaScript+CSS под управлением самого Electron’а.

Расстреливать за такое нужно.

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

Сопровождение кода - часть разработки.

Зачем сопровождать что и так работает? Изменения ради изменений? Тем более в сообществе СПО недостаточно ресурсов, чтобы постоянно чинить поломки API и много проектов не перешедших на GTK 3. Некоторыми из них я пользусь, например GMapCatcher.

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

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

Очень просто. Отсутсвие желания тратить время на такую ерунду бессмысленную. А лишние 15 гигов на диске как-то не жалко.

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

А при переходе GTK -> GTK 2 тоже всё поломали? Была драма?

всё. gtk 1 был не торт, там даже utf8 толком не было - так что из-за наличия киллер фичи, драмы не было, а было облегчение. единственный софт, который застрял на gtk был xmms, все остальные выбросили его с радостью.

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

FLTK сейчас хоть кто-нибудь где-нибудь использует?

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

vtVitus ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Файловый диалог должен быть написан на xlib. Иначе опять «на колу мочало, начинай сначала».

Ну или на WinAPI через вайн. Самый надёжный и тулкитонезависимый вариант!

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

Поверь мне, он ужасен. Ты не захочешь на нём писать

Это первое, что я попробовал. Правда в чем конкретно ужасность кроме скудного набора я не понял. Внешний вид? Так и его переписать можно…

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

Правда в чем конкретно ужасность кроме скудного набора я не понял.

В убогом API. Чтобы быстро накидать UI на коленке – сгодится. Для чего-то крупного – нет.

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

Для чего-то крупного – нет.

А он категорически не предназначен для крупного. Он даже для среднего не предназначен. для этого есть qt ну или gtk, если баблос зажали.

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

или gtk, если баблос зажали

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

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