LINUX.ORG.RU

Первый выпуск мультимедийной библиотеки LDL c поддержкой старых систем

 ,


6

2

Представляю Вашему вниманию разработанную мной первую версию мультимедийной библиотеки Little DirectMedia Layer, сокращённо LDL.

Библиотека написана на С++ 98 стандарта, что позволяет компилировать ее начиная с Visual C++ 6.0. Код распространяется на условиях Boost Software License 1.0. Но библиотека не ограничивает программистов в выборе стандарта языка C++, программист может использовать любой современный стандарт языка. Я придерживаюсь философии downgrade — это использование старых устройств и софта в повседневной жизни, когда компании не поддерживают свои же «устаревшие» операционные системы или устройства, увеличивая с каждой новой версией своего продукта системные требования, или прекращают поддержку девайса. Миллиарды устройств по всему миру ежесекундно перемалывают миллиарды инструкций неоптимизированного кода.

В этом году я выступил на конференции С++ 2023 с докладом «Вперед в прошлое, или Разрабатываем фреймворк под Windows 95 в 2023 году».

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

В самом начале процесса разработки я и не предполагал, что данная библиотека вообще возможна. Но при практической реализации прототипа, добавляя строчку за строчкой в фундамент будущей библиотеки, убеждался в возможности ее создания и практическом применении.

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

Возможности библиотеки:

  • поддержка Linux Debian 3 и выше (обеспечена нативная сборка);
  • поддержка Windows 95 — Windows 11;
  • простое API для работы с 2D графикой;
  • загрузка множества графических форматов (bmp, png, tga, jpg);
  • кроссплатформенное API над окнами и событиями ОС;
  • для аппаратного ускорения графики используется OpenGL 1.2 и
  • OpenGL 3.3, присутствует поддержка обработки графики только на ЦПУ, если отсутствует аппаратное ускорение;
  • рендер может быть выбран динамически при загрузке приложения;
  • единое API для всех систем — напиши один раз и компилируй везде!
  • воспроизведение звука;
  • динамическая и статическая линковка.

Планы на будущее:

  • поточное воспроизведение звука;
  • вывод текста с поддержкой библиотеки freetype;
  • дополнительные рендеры Direct3D 9, 10, 11;
  • API для работы с потоками;
  • встроенная поддержка API для работы с сетью;
  • портирование фреймворка на другие платформы: Android, IOS, MacOs.

Ссылки:

>>> Подробности



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

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

Нужно посмотреть, доступен ли для солярис 2.5 компилятор С++ 98. Сегодня посмотрю информацию по данной ОС. Вы не первый кто, её упоминает.

JordanCpp
() автор топика

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

Всем бы так!

kirill_rrr ★★★★★
()

я сначала подумал что это типа ffmpeg только для старых систем, хотя это скорее sdl. Всё равно мило!

Andrew-R ★★★★
()
Ответ на: комментарий от JordanCpp

Хорошо бы добавить в планы использование более современных фич стандартов.

Ах, недолго музыка играла. Новый стандарт с++ - это компилЯтор размером в гигабайт (уж на стадии компилирования компилятора - точно). И получается примерно как с elks - для генерации флоппика ОС нужно потратить N часов современной машины на кросс-компилятор. Нативный делать боятся - он даже для ansi c едва влезает в 64кб/64кб сегментов.

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

Ах, недолго музыка играла. Новый стандарт с++ - это компилЯтор размером в гигабайт

Я об этом писал, что это сузит портабельность библиотеки и главная её фича пропадает. Никто не мешает компилировать библиотеку любым современным компилятором. Или писать на ней любой проект хоть с С++ 23.

Большое преимущество, что можно нативной прям в самой старой системе собрать библиотеку и на ней разрабатывать.

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

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

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

эт да. Просто я уже не первый раз обжигаюсь на ЗАВИСИМОСТЯХ.

https://git.sr.ht/~rabbits/uxn11/tree/main/item/src/uxn11.c

вот тут например, зависимость от timerfd прибивает эмулятор к современным линухам. Кто-то написал патч для FreeBSD, с ним собралрсь даже на Slackware 9.1 (Которая целиком в гиг помещается, и еще на разработку остаётся).

https://lists.sr.ht/~rabbits/public-inbox/patches/32512

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

У меня библиотека не собиралась на debian 3 из за функции clock_gettime, её нет в старых версиях. Заменил на gettimeofday и всё собирается.

Можно делать тоньше. Обмазывать ifdef’ами. Пока это всего лишь одно расхождение между lubuntu 2023 и debian 2003. Поэтому с таким функционалом поддержка того же старого линукса, состоит в замене одной функции. Сложно емсли явно юзаются новые функции из glibc. Бывает им нет альтернатив. Так как их нет в ядре, так как ядро старое, а glibc полагается на их реализации в ядре. Это более сложный случай.

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

yeah …

Я ради практики собрал (как бы полупортировал) предшественника cinelerra - broadcast2000 под одновременно и более новый компилятор (которому отсутствие return категорически не нравилось) и обратно под ранний Линукс. Жаль, что старых железок видеозахвата у меня больше нет, хотя через v4l враппер вроде даже модерновую uvc камеру было видно!

https://github.com/Randrianasulu/broadcast2000

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

Нас оказывается не так мало:) Зачем это было делать, да потому, что по фану.

У меня есть идея ещё добавить враппер glide api над opengl. Если драйвер поддерживает glide будет использоваться оригинальный, если нет, то враппер. Api минимальное и есть исходники.

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

Я ещё провёл эксперимент. Написав небольшой прототип понизив версию С++ до всех стандартов. https://github.com/JordanCpp/LDL_Lib

Прототип нативно собирается под dos компилятором borland C++ 2.0 1991 года выпуска:) И так же под windows.

Для более высокоуровневого API добавил обертку на С++ 98.

Функционал минимален, но мне нужно было убедиться на практике, насколько глубока кроличья нора.

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

Монобогданчик, тебя разбанили?

Миллиарды устройств по всему миру ежесекундно перемалывают миллиарды инструкций неоптимизированного кода.

Ты не сечёшь. Лень - двигатель прогресса. Говнокодеры лепят говнокод, производители вынуждены делать всё более мощные процессоры. В итоге всем хорошо.

А твой подход ведёт к деградации.

философии downgrade

А чё не луддизм?

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

А твой подход ведёт к деградации.

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

А чё не луддизм?

Потому, что это другое:)

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

Ты не сечёшь. Лень - двигатель прогресса. Говнокодеры лепят говнокод, производители вынуждены делать всё более мощные процессоры. В итоге всем хорошо.

Очень даже понимаю. Так сам фулстек разработчик. И я знаю, что такое веб и как там всё всрато и с производительностью на фронте. С большими тормозными библиотеками и т.д

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

Монобогданчик, тебя разбанили?

Это явно какой то внутренний мем, но я не в курсе.

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

А чё не луддизм?

Потому что луддизм — когда вообще без конплюкторов этих бесовских.

Mobutu_Sese_Seko
()

Библиотека вроде хорошая, поэтому я тебе дам совет: напиши на гитхабе, что она делает, какие задачи решает, и зачем она нужна. А то нифига не понятно.

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

Greetings!

Ага, вам тоже.

LDL - Little Directmedia Layer

Это наверное какая-то медийная хрень?

Free cross-platform library.

Классно!

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

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

Спасибо за совет. Обновлю редми и более подробно опишу функционал.

JordanCpp
() автор топика

я и не предполагал, что данная библиотека вообще возможна

Но старый SDL ведь есть и он работает. Кстати, чем LDL лучше старого SDL?

Direct3D 9

Удачи поставить рантайм на Windows 95. Для нормальной работы нужно начинать хотя бы с Direct3D 8.

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

Но старый SDL ведь есть и он работает. Кстати, чем LDL лучше старого SDL?

Старый SDL не развивается. Пока LDL не лучше, так как отстаёт от функционала SDL. Но функционал будет добавлен в ближайшем будущем, работа со звуком, текстом и сетью.

Особенность LDL в поддержке в том числе и старых систем. Старые и новые ОС объединены одним API. Написан на С++, используются исключения, пространство имён, а не просто префикс.

Удачи поставить рантайм на Windows 95. Для нормальной работы нужно начинать хотя бы с Direct3D 8.

Рантайм выбирается динамически в зависимости от того, что поддерживает ОС. На windows 95 будет выбран поддерживаемая версия opengl 1.2 или software. Dx 7,8 тоже в планах.

Рантайм можно указать через командную строку. Добавив код выбора, если необходимо.

JordanCpp
() автор топика
Последнее исправление: JordanCpp (всего исправлений: 3)
Ответ на: комментарий от CYB3R

Я понимаю, что SDL это десятилетия развития и работа тысяч программистов. Я пока единственный разработчик LDL. И просто не могу сразу всё запилить, мешает ограничение в 24 часа в сутках:)

Поэтому я выпустил первый релиз в надежде, что будет интерес во вне. Пока LDL это 2D графика и события ОС. Тоже не мало.

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

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

Просто выкинуть? Выкидывать работающие вещи - аморально, потому что экология, потреблядство, и всё такое.

Ты все перепутал. Выкинуть гроб, который за день работы съедает свою рыночную стоимость — экологично, а не выкинуть — аморально.

t184256 ★★★★★
()
Ответ на: комментарий от Andrew-R

прибивает эмулятор к современным линухам.

Что они там в море на своей яхте используют - к тому и прибито)

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

Это я понимаю. Вопрос – зачем? В чём проблема использовать SDL 1.2? Не хватает каких-то функций? Нет поддержки каких-то платформ? Или лицензия не нравится? Не проще ли было бы форкнуть SDL 1.2 и добавить недостающее туда? Пока что для меня это выглядит как изобретение велосипеда на старом C++ (ничего плохого в этом нет, конечно).

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

Изначально был небольшой прототип, для проверки идеи единого API на С++. Потом прототип стал обрастать кодом и ещё мне интересно самому разобраться как всё это работает. Сейчас уже поздно, проект не маленький. Портировать, что из SDL 1.2 возможно, создавать форк и вносить изменения это уже сверх трудозатратно для меня.

И я хотел что бы проект был написан на С++. С классами, исключениями и нормальным пространством имён. В проекте я использую сишные библиотеки, но они аккуратно обмазан классами. Обмазывать классами SDL это уже отдельный проект, которым мне не интересно заниматься.

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

Пока что для меня это выглядит как изобретение велосипеда на старом C++ (ничего плохого в этом нет, конечно).

В своё время и SDL был велосипедом и SFML. Нравится программистам писать библиотеки:)

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

Ещё большой плюс в том, что я знаю код и понимаю его. Мне легче добавить функционал чем впилить в тот же SDL.

JordanCpp
() автор топика

Круто! :)

Лично мне оно не нужно, но проделанная работа вызывает уважение. Успехов вам! :)

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

Просто выкинуть? Выкидывать работающие вещи - аморально, потому что экология, потреблядство, и всё такое.

Ты все перепутал. Выкинуть гроб, который за день работы съедает свою рыночную стоимость — экологично, а не выкинуть — аморально.

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

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

Manhunt ★★★★★
()

Одобряю и поддерживаю! Желаю успехов! Интересно на OS/2 Warp можно ли собрать… так, просто интересно

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

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

Это Love2D ;)

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

Так а ты не бери гробы, бери миллипуськи с Intel N100/N300 которые едят шиш с маслом и делают 10летние i7 на вдесятеро меньшем же потреблении. Или что-нибудь на ультрабучных процах, если надо быстрее.

Железо эпохи Win95 же вообще где-то между часами и ключом от домофона.

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

Железо эпохи Win95 же вообще где-то между часами и ключом от домофона.

Однако формирование нескольких десятков отчётов, выполнение всех операций по расчётам, удержаниям, ... для 2000 лицевых счетов производилось за десять минут.

Почти сорок терминальных сессий выполнялись на компьютере 256MB 330MGZ в Альт Linux и никаких задержек не было.

А на нынешних компьютерах, которые на несколько порядков мощнее время затрачивается больше.

Вот как нынешние разработчики сумели этого достичь?

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

Десятками и десятками уровней лишних абстракций, ну.

Значит «Тушенский рынок был лучше, чем другие?».

Скорее всего Вы правы.

Книга «Горе от ума» наверное никогда не устареет.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 3)
Ответ на: комментарий от t184256

Так а ты не бери гробы, бери миллипуськи с Intel

Может, с безудержным потреблением всё-таки стоит притормозить немного?

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

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

t184256 ★★★★★
()

В этом году я выступил на конференции С++ 2023 с докладом «Вперед в прошлое, или Разрабатываем фреймворк под Windows 95 в 2023 году». Своим проектом я хочу доказать, что старое железо еще может приносить пользу и его рано списывать в утиль.

А почему вы смешиваете воедино поддержку старого железа, и поддержку старых операционок, будто одно без другого невозможно? Ну не хотите старое железо выкидывать - накатите на него какой-нибудь из самосборных линуксов. Пооптимизируйте ему конфиги ядра и всё остальное. Это и будет поддержкой старого железа. Можно ещё видяху обновить, и памяти старой добавить. У меня до сих пор «шкафчик» с Феномом начала 2000х служит верой и правдой: напихал в него 20 гигов ддр2 и относительно сносную видяху, и этот мамонт прекрасно всё вытягивает!

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

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

и поддержку старых операционок, будто одно без другого невозможно

Потому что это так. Самое простое: многие современные дистрибутивы под 32 бита просто не собирают. А на старом железе бывает, что большое количество памяти просто не поддерживается. Например тот же IBM thinkpad t60. Там 3 гб оперативной памяти максимум поддерживается. А 32-битные программы потребляют памяти меньше. Вот для сравнения: CDE 2.5.2 с xft 64 бита, иксы потребляют

161.8 MiB + 471.5 KiB = 162.3 MiB       Xorg
Дефолт CDE 32 бита, иксы потребляют
8.5 MiB + 608.0 KiB =   9.1 MiB       Xorg

Видно разницу?

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

Первый выпуск мультимедийной библиотеки LDL c поддержкой старых систем

Конечно РЕСПЕКТ Вам за разработку.

Далее то о чём скажу не в упрёк Вам потому, что объём работ очень большой.

ИМХО, разрабатываемое Вами API полезно даже не столько для «старых компьютеров», а как подход к разработке эффективного кроссплатформенного API.

Эта задача в целом, включает в себя также разработку эффективного API для работы с объектами (создание, поиск, ...) в memory и бинарными данными на дисках и много иного API.

Ныне все проблемы решают покупкой более быстродействующих компьютеров.

Безусловно корпорации, производящие железо и ОС рады этому, но речь даже не о них (пусть производят).

Пост не о том чтобы «найти крайнего», а о том, что к сожалению ныне хайпа много, а хороших и эффективных технологий мало.

Ныне в тренде - «Кто выще бье, тот краще грает».

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 5)
Ответ на: комментарий от vbcnthfkmnth123

Потому что это так. Самое простое: многие современные дистрибутивы под 32 бита просто не собирают.

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

Например тот же IBM Ithnkpad t60. Там 3 гб оперативной памяти максимум поддерживается. А 32-битные программы потребляют памяти меньше.

Вот и используйте 32-битные сборки программ с 3 гигами оперативы. Это, в целом, рабочий вариант. Но кому вы собираетесь предлагать либу с поддержкой винды95? Кто и зачем будет свой софт под неё переписывать? А кроме того, если либа собирается поддерживать и современные технологии тоже, то где вулкан? Где вейланд? Или выходит, что как раз таки новые технологии она и не поддерживает?

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

А почему нельзя было, ну не знаю там, к примеру бэкенд СДЛ3 запилить для старых систем? Тогда хотя бы было бы понятно, что вот она либа, и вот он - софт. И, в совокупности, это уже поддержка старых железок и операционок.

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

Но кому вы собираетесь предлагать либу с поддержкой винды95?

Тем кто десятилетиями сидит на одном железе. Я помню одного человека, у которого вроде 30 лет один компьютер и ещё живой.

Кто и зачем будет свой софт под неё переписывать?

Кто захочет.

то где вулкан? Где вейланд?

Вы так шутите? Для вулкана нужны видеодрайвера с поддержкой вулкана. Для старого железа такого нет.

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

Тем кто десятилетими сидит на одном железе. Я помню одного человека, у которого вроде 30 лет один компьютер и ещё живой.

Ну моему феному 20 лет. И не просто живой, а тянет всё подряд, как хорошая рабочая лошадка.

Кто захочет.

Ну так вы признаёте, что, таким образом, «поддержка старого железа» (в концепции данной либы), по факту определяется не наличием этой либы, а наличием этого самого «того, кто захочет»? Которого, кстати, как бы, и нет. :)

Вы так шутите? Для вулкана нужны видеодрайвера с поддержкой вулкана. Для старого железа такого нет.

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

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

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

Потому, что либа тестировалась на pentium 75 mhz 8 мб ОЗУ и windows 95. Современный Linux очень проблематично поставить на такое железо с графическим интерфейсом. Поддержка старого железа не только ОС, но и обеспечение приемлемой производительности на этом железе.

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

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

Так в этом же и смысл библиотеки. Что поддержка старого железа убрана под капот библиотеки и не требуется специальных действий, что бы обеспечить к примеру запускаемость на windows 95, это лишь как пример. Хотя именно на столько старых ОС, есть своя специфика. Но начиная с windows 2000 и debian 3, всё будет работать, как и на современных ОС. В этом и полезность и красота библиотеки.

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

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

Я работаю над библиотекой один, у меня просто нет времени сразу обеспечить работу и на Vulkan. Обязательно это рендер будет.

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

Ну так вы признаёте, что, таким образом, «поддержка старого железа» (в концепции данной либы), по факту определяется не наличием этой либы, а наличием этого самого «того, кто захочет»? Которого, кстати, как бы, и нет. :)

Поддержка старого железа и ОС. Это возможность, возможностью можно воспользоваться, а можно и проигнорировать. Это фича которая мне нравится, и она ни как не принуждает будущих пользователей обеспечивать работоспособность своей библиотеки на windows 95.

JordanCpp
() автор топика
Последнее исправление: JordanCpp (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.