LINUX.ORG.RU
ФорумTalks

Зачем придумали GTK3?

 ,


2

6

Почему нельзя было развивать GTK2? Какие в нём были проблемы, требующие фундаментальной переработки с потерей совместимости? Выпуск GTK3 привёл к расколу GUI программ. У меня тоже есть программы на GTK2.

В Windows почему-то умеют поддерживать обратную совместимость. Программы для Windows 1.0 до сих пор работают на Windows 10 (на 32 битах нативно, а на 64 битах требуется 16 битный эмулятор winevdm). В WinApi не было фундаментальных изменений с времён Windows 1.0, даже соответствующим образом написанные 16 битные программы можно перекомпилировать под 64 бита. При этом он намного гибче всех Линуксовских тулкитов, можно обрабатывать окна в разных потоках, вставлять дочерние окна из другого процесса, рекурсивно вызывать цикл обработки сообщений.

Qt в целом выглядит стабильнее GTK. Большинство программ с минимальными изменениями можно перенести на новую версию.

Перемещено leave из desktop

★★★★★

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

Программы для Windows 1.0 до сих пор работают на Windows 10 (на 32 битах нативно, а на 64 битах требуется 16 битный эмулятор winevdm)

это не совсем так - была куча игрушек и программ под win95, которые перестали стабильно работать или грузиться уже под win98.

И эта стабильность даётся не просто так - в микрософт огромный тестовый отдел в котором тестируют популярные приложения и делают так, чтоб они работали в новых виндах. Хрестоматийный случай с wordperfect какой-то дремучей версии - там заложились на порядок загрузки dll и винда, по хешу экзешника проверяет, что это wp нужной версии и грузит dll не так как надо, а как хочет программа. И таких программ огромное кол-во - вот так даётся винде её стабильность. В linux нет таких ресурсов поэтому и нет такой штабильности.

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

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

Это всё закончилось в windowsXP. В следующих версиях слетела куча приложений. Они перестали работать.

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

это не совсем так - была куча игрушек и программ под win95, которые перестали стабильно работать или грузиться уже под win98.

Значит там был говнокод, не соответствующий спецификациям API и ABI.

Хрестоматийный случай с wordperfect какой-то дремучей версии - там заложились на порядок загрузки dll и винда, по хешу экзешника проверяет, что это wp нужной версии и грузит dll не так как надо, а как хочет программа.

Хрестоматийный пример говнокода. Надо было разработчиков WordPerfect пинать.

И таких программ огромное кол-во - вот так даётся винде её стабильность.

Я бы не стал преувеличивать.

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

Это всё закончилось в windowsXP. В следующих версиях слетела куча приложений. Они перестали работать.

Публичный API стабильный. Детали реализации могли меняться.

Совместимость не хуже чем в Java.

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

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

Не вайн а Ява, что работало 20 лет назад будет работать и через 20 лет. Без всякой этой вашей перекомпиляции :-P

Вообще неправда. Пойди запусти какую-нибудь ipmi-консоль…

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

Одно дело ошибки в программе, другое — когда выкатывают несовместимое API.

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

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

Публичный API стабильный

Вот только как раз между ХР и семёрочкой они выкинули некоторое г..о мамонта. Так что стабильный, да не весь.

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

Бывают случаи, когда непонятно, где ошибка.

В fallout на новых версиях слетала палитра, как-то рандомно и не у всех.

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

В СПО это было бы даже проще, чем в проприетарном софте: читай исходники, отлаживай, разбирайся. Но у нас всё наоборот, нужно ломать совместимость постоянно, переделывать ключевые api, закрывать багрепорты по wontfix потому что они «устарели» и т.п.

И люди на это ведутся, коллективное безумие.

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

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

Это смотря с чьей стороны они мелкие. Это смотря с чьей стороны «нет проблемы»

безопасник (член команды RustSec) создал issue «ваш код содержит UB», автор попросил привести пример который триггерит его, безопасник такой код предоставил, после чего автор исправил использование публичным апи приватного так, чтобы UB не возникало. На вопрос «почему бы не убрать unsafe» автор ответил, что это может иметь последствия для производительности, поэтому сейчас он просто фиксит симптом, чтобы подумать, как это исправить без просадки производительности (напомню, что по рейтингам techempower actix-web является самым быстрым), или неудобного апи (оно у актикса на удивление хорошее). После чего на него обрушился вал обвинений в том, что он неправильно пользуется языком, и вообще, не должен никогда на нем писать.

Итого это превращается по сути в работу. Но за которую тебе не платят

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

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

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

между ХР и семёрочкой они выкинули некоторое г..о мамонта

Список выкинутых API в студию.

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

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

ANSI функции никуда не делись, они и в Windows 10 есть. Скорее всего кривая русификация или нет нужных шрифтов.

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

Вот только как раз между ХР и семёрочкой они выкинули некоторое г..о мамонта. Так что стабильный, да не весь.

С одной стороны ты прав, что что-то выкидывали. С другой стороны я не помню ни одного change log где бы писалось что выкинули то что обещали не выкидывать. Не всё что экспортировано в dll предназначено для программистов прикладных програм. (ака недовольство wine программистов что часть функций которые им нужно эмулировать не описана на MSDN)

А чисто механически ты прав, вот между XP и Vista в некоторых dll есть Removed Symbols

https://abi-laboratory.pro/compatibility/Windows_5.0_to_Windows_6.0/x86_64/abi_compat_report.html

Но они есть и в Qt 5 которая abi совместима между всей пятой версией.

https://abi-laboratory.pro/index.php?view=timeline&l=qt

и в gtk 3 (смотреть до 3.24.1, всё что выше это бетки gtk4), которая тоже abi совместима для всей 3 версии.(сказ о том как Zennitar собирает для CentOs 6 для gtk 3.6(не помню точно версию) и работает на всех Linux со всеми версиями gtk, вплоть до 3.24)

https://abi-laboratory.pro/?view=timeline&l=gtk+

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

С другой стороны я не помню ни одного change log где бы писалось что выкинули то что обещали не выкидывать

А как можно обещать что-то не выкидывать? Разработчики QT разве обещали что-то не выкидывать? А разработчики Gtk?

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

А чисто механически ты прав, вот между XP и Vista в некоторых dll есть Removed Symbols

https://abi-laboratory.pro/compatibility/Windows_5.0_to_Windows_6.0/x86_64/abi_compat_report.html

Removed Symbols 12

winbase.h, kernel32.dll

HeapAlloc ( HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes )

Они как-то странно считают. Некоторые символы были перемещены в другие DLL и заменены ссылками на другие DLL (исполняемый формат PE так умеет).

Вывод моей утилиты для Windows 10:

Module Name: KERNEL32.dll
...
838	Heap32ListNext	6B85B0A0
839	Heap32Next	6B85B140
840	HeapAlloc	NTDLL.RtlAllocateHeap
841	HeapCompact	6B834CA0
842	HeapCreate	6B819960
...
X512 ★★★★★
() автор топика
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от tiinn

А как можно обещать что-то не выкидывать?

Если в документации API есть функция и явно не написано, что её могут выкинуть, то значить нельзя выкидывать.

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

Вообще неправда. Пойди запусти какую-нибудь ipmi-консоль…

jvm поддерживает все версии обычной SE от начала времён, в том что вам производители браузеров, за которых вы голосуете кнопками «скачать», сломали поддержку апплетов, виноваты только вы сами.

https://www.oracle.com/technetwork/java/javase/javaclientroadmapupdatev2020may-6548840.pdf

и да, ie11 + java8 пока работают

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

Так все ж выкидывают, и пишут новую версию документации. В лучше м случае, через версию API и документации, где она получает флаг obsolete

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

Так все ж выкидывают, и пишут новую версию документации.

В WinApi такого нет. Это в тулктах и библиотеках Линукса постоянно что-то ломают. Не знаешь на какие API можно рассчитывать.

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

А как можно обещать что-то не выкидывать?

Всё про что не написано, что выкинут, то обещают не выкидывать :)

С самого начала обещали ломать функции Shell API:

(shlwapi.dll)

Эта dll шла с Internet Explorer и там были удобные специальные виджеты которых нет среди стандартных контролов Windows. Разрабы захотели их использовать, а не писать свои велосипеды. Microsoft сделала документацию, но там с самого начала написали что API может меняться с версиями Windows, то есть не будет стабильным

И действительно API менялось/удалялось:

https://docs.microsoft.com/en-us/windows/win32/shell/deprecated-api

Возможно ещё есть подобные примеры, где с самого начала не обещали стабильный API…

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

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

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

Я всерьёз задумываюсь, что у разработчиков gtk3 течёт крыша.

Например.

Была такая функция gtk_widget_modify_font(), которая меняла шрифт для указанного виджета.

Пытаемся собрать под gtk3 код с этой функцией. Получаем:

info-window.c:79:5: предупреждение: неявная декларация функции «gtk_widget_modify_font»; имелось в виду «gtk_widget_override_font»? [-Wimplicit-function-declaration]
   79 |     gtk_widget_modify_font (text_view, font_desc);
      |     ^~~~~~~~~~~~~~~~~~~~~~
      |     gtk_widget_override_font

При этом код всё равно компилируется и работает.

То есть они убрали функцию из хидера, но оставили символ в библиотеке. И этот символ не заглушка, а рабочая функция.

Но мы хотим сделать по феншую. Открываем документацию:

gtk_widget_modify_font has been deprecated since version 3.0 and should not be used in newly-written code. Use gtk_widget_override_font() instead

То есть, парни, вы тупо переименовали функцию, ЧТОБЫ ЧТО? Эээээ… Ладно. Окей. Правим сорцы:

#if GTK_CHECK_VERSION(3, 0, 0)
    gtk_widget_override_font (text_view, font_desc);
#else
    gtk_widget_modify_font (text_view, font_desc);
#endif

Компилируем:

info-window.c:80:5: предупреждение: «gtk_widget_override_font» устарело [-Wdeprecated-declarations]
   80 |     gtk_widget_override_font (text_view, font_desc);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~

Да м****ь! Смотрим документацию:

gtk_widget_override_font has been deprecated since version 3.16 and should not be used in newly-written code. This function is not useful in the context of CSS-based rendering. If you wish to change the font a widget uses to render its text you should use a custom CSS style, through an application-specific GtkStyleProvider and a CSS style class.

То есть, понятно, да?

В 3.0. они зачем-то переименовывают функцию, которая что под старым именем что под новым работает абсолютно одинаково.

В 3.16 они объявляют её deprecated, потому что прикладной программист слишком мало задолбался, когда переименовывал функции в своём коде. Пускай-ка теперь берёт и реализует an application-specific GtkStyleProvider! А то ишь, расслабился.

Ну и в gtk4, соответственно, этой функции уже не будет.

(Впрочем, чего не будет в gtk4 — это отдельный анекдот.)

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

The GDK_SURFACE_STATE_ICONIFIED value of the GdkSurfaceState enumeration is now GDK_SURFACE_STATE_MINIMIZED.

The GdkWindow functions gdk_window_iconify() and gdk_window_deiconify() have been renamed to gdk_toplevel_minimize() and gdk_toplevel_present(), respectively.

АХАХАХА, просто чтобы ты не забывал, как пользоваться sed!

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

Зачем ты тему создал с вопросом? Судя по ветке ты всё на свете знаешь?

Я бы не стал преувеличивать.

по слухам в windows 7 их было более 10000. Именно из-за этого в винде все старые программы работают без проблем.

Надо было разработчиков WordPerfect пинать.

Глупышка. программу уже продали, уже сто лет как wp перепродали несколько раз. поддержка закончилась в прошлом веке. люди до сих пор используют, программа перестаёт работать в новой винде - «винда плохая». И именно из-за того что такое не часто происходит - винда везде.

Значит там был говнокод

Значит ты унылый баклан, который мало чего в реальном мире знает.

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

другое — когда выкатывают несовместимое API.

собор и базар - нет никаких гарантий, договорённостей и т.п. мы пишем, как нам хочется и как мы думаем правильно. не согласен? вот код делай как ты хочешь. (с) это главная философия опенсорса. в этом её и + и -.

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

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

Да могут как угодно, как им хочется: Зачем придумали GTK3? (комментарий)

Вот нравится им функции переименовывать туда-сюда — ради Бога.

Но свобода штука обоюдная: вы свободны творить херню, а другие свободны эту херню называть хернёй.

нет никаких гарантий, договорённостей и т.п.

Их в винде тоже нет. Никто по закону MS не сможет принудить писать совместимые API и тащить поддержку. Но по делам видны мотивы.

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

We are committed to releasing GTK 4 before the end of year

ждем «Зачем придумали GTK4?»

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

Пускай-ка теперь берёт и реализует an application-specific GtkStyleProvider!

Не-а, смысл затеи как раз в том, чтобы перестали задавать из кода то, что должно определяться темой ;)

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

которые пишут хаками даже на джаве

И виновата, конечно, не консервативная идеологически огороженная жаба, а говнокодеры, понятно.

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

В Windows тоже есть функция IsIconic(), хотя сворачивание окон в иконки последний раз было в Windows 3.11. Иксов в Windows никогда не было как основной графической системы.

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

Куда пошла!

Ex-версии же появились позже версий без Ex?

Так что это ни фига не «сразу».

mertvoprog
()

Зачем придумали GTK3? Почему нельзя было развивать GTK2?

Зачем придумали Windows 10? Почему нельзя было развивать Windows XP?

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

Зачем придумали Windows 10? Почему нельзя было развивать Windows XP?

Некорректное сравнение. В Windows 10 работают программы Windows XP, а GTK2 программы не работают на GTK3.

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

принудительно впарить совершенно новый DE под известным именем GNOME
принудительно впарить

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

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

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

Ты как обычно врываешься в треды не приходя в сознание.

Самому не стыдно?

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

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

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

gtk_widget_modify_font has been deprecated since version 3.0 and should not be used in newly-written code. Use gtk_widget_override_font() instead

gtk_widget_override_font has been deprecated since version 3.16 and should not be used in newly-written code.

Эталонная гтк-движуха. Повезло еще, что им не хватает рук (или щупалец), чтобы параллельно еще и гтк2 «развивать» в таком стиле.

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

Причем тут иксы? Это просто ИБД с переименованием маши в дашу. Ну а чо делать, если менеджеры столь эффективны, что впендюрили релизы по расписанию с бесконечным накручиванием циферок версии.

bread
()

В Windows почему-то умеют поддерживать обратную совместимость.

Ценой десятков гигабайт легаси-библиотек. Существуют легковесные версии Windows 10, где убрали всё устаревшее, и втиснули ОС в 1 гигабайт.

В WinApi не было фундаментальных изменений с времён Windows 1.0, даже соответствующим образом написанные 16 битные программы можно перекомпилировать под 64 бита.

Бинарную совместимость ломали неоднократно. Перекомпилировать можно только «правильно» написанные программы. Таких — подавляющее меньшинство. Не знаю, насколько репрезентативна моя выборка, но почему-то всё легаси времён Windows 2000 (включая пересобраное) требует запуска под админом, хотя под 2000 работало без него.

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