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)

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

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

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

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

Главная идея библиотеки это найти баланс между возможностям и системными требованиями. То есть, что бы функционал соответствовал системным требованиям. И если есть 2D графическое API, то оно могло работать и на железе 25+ лет. Раньше ведь тоже и картинки и линии рисовали на очень скромном железе.

Если использовать только новое графическое API, тогда выбрасывается много старых видеокарт. Поэтому нужно юзать несколько OpenGL, directx и Vulkan.

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

Под Итаник NT не было. Там была сразу XP/2003 сервер.

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

Современный Linux очень проблематично поставить на такое железо с графическим интерфейсом.

Вот и проверили бы это. Судя по всему, на подобном железе можно было запускать вейланд, вплоть до версии ядра 6.3, где дропнули поддержку старых видео карт: https://www.phoronix.com/news/Linux-6.3-Dropping-Old-DRM Если взять какой-нить минималистичный вейланд композитор и ядро до 6.3, то кто сказал, что не взлетит на какой-нить вуду5?

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

Вот именно! А на железе, где работает 2000, вполне можно уже попробовать относительно современный линукс, с минимальным вейландом вместо иксорга. А если взлетит, так потом и спортировать видео дрова, удалённые из 6.3, на АПИ новых ядер. И вот вам поддержка старого железа. Вейланд для кого, по вашему, запилили? И поверх него уже работает SDL с кучей приложух под него.

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

Вот именно! А на железе, где работает 2000, вполне можно уже попробовать относительно современный линукс, с минимальным вейландом вместо иксорга. А если взлетит, так потом и спортировать видео дрова, удалённые из 6.3, на АПИ новых ядер. И вот вам поддержка старого железа. Вейланд для кого, по вашему, запилили? И поверх него уже работает SDL с кучей приложух под него.

Ага и уровень работы вырастет на порядок + ещё дрова портировать. Цель поддерживать работоспособность библиотеки на оригинальных старых версиях linux.

Вот и проверили бы это. Судя по всему, на подобном железе можно было запускать вейланд, вплоть до версии ядра 6.3, где дропнули поддержку старых видео карт: https://www.phoronix.com/news/Linux-6.3-Dropping-Old-DRM Если взять какой-нить минималистичный вейланд композитор и ядро до 6.3, то кто сказал, что не взлетит на какой-нить вуду5?

Можно сделать всё, что угодно. Но для этого нужно время, у меня нет времени на такие процедуры. Работаю с тем, что есть. Возможно когда разработчиков станет больше чем один, можно подумать о таких экспериментах. Понимаете?

Поэтому пока нет поддержки Vulkan, лишь потому, что я пока не успел его внедрить. А занимаюсь созданием уроков по библиотеке и допилом других систем.

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

Ага и уровень работы вырастет на порядок + ещё дрова портировать.

Ну, собсно, только дрова и портировать. Вся остальная «работа» - это собрать какой-нить линукс, и, с ядром ниже 6.3, посмотреть, как оно там вообще живёт. Дел на пол дня. А вот если взлетит, и придётся дрова портировать - тогда работы чуть больше, но и то, имхо, если и портировать, то только вудушки. Всякие там сис, с3 и поч нафиг никому не сдались.

Поэтому пока нет поддержки Vulkan, лишь потому, что я пока не успел его внедрить.

Да ё-моё. :) У вас нет софта, и нет ни 1 автора, который захотел бы свой софт на эту либу портануть. Я, конечно, понимаю, что это сущая мелочь, и главное - поддержать вулкан и винду95. И тогда дело пойдёт! Ага, знать бы ещё, куда оно пойдёт. :)

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

А на железе, где работает 2000, вполне можно уже попробовать относительно современный линукс,

Нет. На x86 до 4-го пня - современный Линукс не работает. Ты начинаешь собирать например Файерфокс, он тянет бинарь, где зашита SSE2. И никак иначе. Тупик. В QT зашита SSE, и хотя её можно пересобрать без этого, это на таком железе геморрой. Опять же, проблема оперативы. Современный Линукс - только начинает работать на 512м оперативы. Он даже не проинсталлируется на 256. До 4-го пня такой объем - проблема. 2000-я венда работала на 64 гигах оперативы, современный Линукс это не способен.

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

Да ё-моё. :) У вас нет софта, и нет ни 1 автора, который захотел бы свой софт на эту либу портануть

Пока нет. Там посмотрим. Проект только релизнулся. Первым реализом я и хочу привлечь разработчиков.

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

Ну, собсно, только дрова и портировать. Вся остальная «работа» - это собрать какой-нить линукс, и, с ядром ниже 6.3, посмотреть, как оно там вообще живёт. Дел на пол дня. А вот если взлетит, и придётся дрова портировать - тогда работы чуть больше, но и то, имхо, если и портировать, то только вудушки. Всякие там сис, с3 и поч нафиг никому не сдались.

Это всё нужно делать и находить время. Разбираться и т.д

Я, конечно, понимаю, что это сущая мелочь, и главное - поддержать вулкан и винду95.

Для поддержки Windows 95 пришлось добавить в библиотеку 5 строчек кода.

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

Нет. На x86 до 4-го пня - современный Линукс не работает. Ты начинаешь собирать например Файерфокс, он тянет бинарь, где зашита SSE2. И никак иначе. Тупик. В QT зашита SSE, и хотя её можно пересобрать без этого, это на таком железе геморрой. Опять же, проблема оперативы. Современный Линукс - только начинает работать на 512м оперативы. Он даже не проинсталлируется на 256. До 4-го пня такой объем - проблема. 2000-я венда работала на 64 гигах оперативы, современный Линукс это не способен.

Спасибо за информацию. Не так уж и безумен мой подход к портироанию:)

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

Я пытался на 3-й пень вкорячить современный Линукс. Сдался.

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

Ты начинаешь собирать например Файерфокс, он тянет бинарь, где зашита SSE2. И никак иначе. Тупик. В QT зашита SSE,

Нужно ли мне вам рассказывать про самосборные, легковесные дистры, где не надо собирать КДЕ и фаерфокс?

2000-я венда работала на 64 гигах оперативы, современный Линукс это не способен.

Чего?

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

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

Не нужно. Это всё равно, что старый Линукс. Это не нужно. Я хочу хотябы веб смотреть.

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

Вуду 5 требует старый AGP. А старый AGP есть только на 3-х пнях. Не вкорячивается современный Линукс на 3-й пень.

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

Не нужно. Это всё равно, что старый Линукс.

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

Это не нужно.

Да, винда95 - куда нужнее! :)

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

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

> Да, винда95 - куда нужнее! :)

На сегодня, венда 95 и пр. - единственный способ оживить то железо. Задача оживить то железо - конечно, сомнительна, да. Но Линукс современный там не жилец.

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

Да, винда95 - куда нужнее! :)

Обеспечение работоспособности на Windows 95 влечёт за собой не только использование API windows 95, но и производительность на соответствуещем железе, оптимизацию библиотеки в общем.

И это все способствует её более быстрой работе и на новом железе. Это некий встроенный бенчмарк позволяющий измерять и оптимизировать нужные участки кода.

Если библиотека работает на 75 mhz, то явно это неплохо. И уж на i5 будет летать:)

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

Обеспечение работоспособности на Windows 95 влечёт за собой не только использование API windows 95, но и производительность на соответствуещем железе, оптимизацию библиотеки в общем.

Пфф, да библиотека - ни что. Пустой звук, кто будет весь софт потом под это всё оптимизировать? Можно ещё хвастаться зааптимизированным ХэллоВорлдом. Ну там хотя бы есть на что посмотреть, а библиотека без софта - это что?

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

Оптимизированная библиотека это маленький шажок к быстрым программам. Библиотека 2 дня назад вышла в релиз. Естественно нет ничего, ни софта, ни пользователей.

Ребят ну каммон где я соберу софт и пользователей на второй день релиза. Должно пройти время.

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

Мне понравилось в статье предложение использовать для разработки старое железо.

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

Кстати я презентуху почитал, понравилось, жжошь!

я сам не настолко погромист, чтобы именно с нуля писать, но атлас текстур напомнил к примеру старый mplayer vo sgi где отдельно для opengl 1.1 даже без текстур модуль видеовывода сделали, чтобы на разных SGI с акселераторами без текстурной памяти шло (gldraw?).

86box да,одобрям, там и карточек разных есть, и производительность fpu побыстрее чем в qemu будет, по крайней мере в режиме x86 on x86

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

Кстати я презентуху почитал, понравилось, жжошь!

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

Уверен отсылки вы узнали:)

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

Если взять какой-нить минималистичный вейланд композитор и ядро до 6.3, то кто сказал, что не взлетит на какой-нить вуду5?

под вуду5 нет драйвера egl в меса. А без него всё ездит на софте, медленно и печально

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

в старом линуксе - тормознутый иксорг.

который был cовсем не такой тормозной на тех карточках ДО того, как из него выпилили поддержку XAA :)

https://flaterco.com/kb/video/X-regressions.html

Но всё-таки это не столько пресловутая архитектура (которая позволила аж 3 разных подсистемы ускорения сделать) а приоритеты разработчиков.

Жаль, что voodoo5 до сих пор не эмулируется, только 3-я. Помнится много лет назад кто-то хотел драйвер с kms сделать для них и parmedia. Но не сделал …

а, даже сделал, но все заглохло на 13 лет…

https://www.phoronix.com/news/ODQxMw

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

Но где gcc? Где clang?

GCC 3 и выше. Забыл добавить в редми. Я редми перерабатываю, обязательно добавлю.

clang’ом ещё не собирал. Но думаю проблем не будет.

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

под вуду5 нет драйвера egl в меса.

Ошибаетесь: https://www.vogons.org/viewtopic.php?p=892698#p892698

Можно собрать. Но нужны шаманства, патчи,старые версии, и всё такое прочее. Собственно, почему я и говорю, что надо просто это всё в порядок привести. Иначе так и будут всё это постепенно выпиливать.

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

это про меса fx/glide. Я же про EGL - это не то же самое что опегл, это разные интерфейсы. Да, оно целиком живёт в тарболле меса3д.Но собирается в разноимённые библиотеки, и это не просто так …

В общем там всю цепочку нужно делать от kms в ядре до воскрешения классического драйвера без поддержки пиксельных шейдеров, и портирования или переписывания вуду-специфичного кода так чтобы наружу торчало opengl ES 1.0.. И то не факт что Вестон на таком заработает. В общем там весь стЭк надо пилить. А классический меса драйвер еще и через глайд работал, а не напрямую…..

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

В общем там всю цепочку нужно делать от kms в ядре

Погодите, но ведь её только выпилили в 6.3, я давал ссылку выше. Был же КМС! Или опять «не тот»?

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

нет, это были dri1 драйвера, ДО kms

Ясно, спасибо. Ну… стало быть, никому это не нужно. Иначе бы запилили. И «исправлять» эту ситуацию либами… ну посмотрим, посмотрим. :)

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

Ну а что делать со старыми железками, которые ещё работают? Например, Чем заменить windows98

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

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

Старый SDL не развивается. Пока LDL не лучше, так как отстаёт от функционала SDL.

Лучше. Двадцать лет назад в тырнетах стоны стояли, «Есть ли порт SDL под Borland C++»?

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

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

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

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

Вы сами свою ссылку смотрели? PIII 1.26 Ггц, 512Мб ОЗУ. А мы вам талдычем

При чём здесь ВЫ? Я отвечал не вам, а конкретно Ленину, который утверждал, что на 3й пень линукс не встаёт.

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

А мы вам талдычем про P-233, или PII с 64Мб ОЗУ

Проблема, в основном, в видео драйверах. Вейланд с минималистичным десктопом бы пошёл на таком железе, если бы были нормальные драйвера для вудушек в месе и ядре. Так вот, с них и можно было бы начать… будь это всё хоть кому-то нужно. :)

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

А Ленин и пишет

«Современный Линукс - только начинает работать на 512м оперативы. Он даже не проинсталлируется на 256. До 4-го пня такой объем - проблема

Т.е. если вы найдёте мать с поддержкой 512Мб ОЗУ, да найдёте планки - возможно

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

А если взять старое ядро, например 2.6 .32.71, а софт собирать например с musl?

А вот это можно! Я на 256 Мб ОЗУ Suse 10.1 вкрячивал, с иксами.

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

Он даже не проинсталлируется на 256.

А не надо инсталлировать туда современный линукс с жирным графическим инсталлером. Надо либо самосборный туда ставить, либо какой-нить puppy.

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

puppy на 256 встанет. А вот на 64 - уже нет

Official system Requirements for Puppy Linux:

Processor with a clock frequency of at least 300 MHz

RAM not less than 128 MB

512 MB of free space on a hard disk or USB drive

Video card with support for a screen resolution of at least 1024x768 pixels

Зато на такой машине (и даже с видеокартой, НЕ поддерживающей разрешение 1024x768) запустится Win2K

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

puppy на 256 встанет. А вот на 64 - уже нет

Да это не важно всё. OpenWRT вон и на 16 встаёт. Надо будет - и самосборный поставите. Не там проблему ищите. И версия ядра тут тоже не при чём. Вот то, что дров для вудушки нет - это затык. А остальное - детали.

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

в недрах Некрософт родилось либо ГОВНО либо НЕ СВОЁ.

Что могли, лицензировали. Что могли, скопировали. Кто-то этим тоже должен заниматься. Потому что настоящий инноватор может или проглядеть потенциал своих разработок (как Xerox), или делать лишь замкнутые на самих себя элитные продукты (как Apple), или злоупотреблять сложившейся монополией (привет, Bell).

За исключением, пожалуй, Экзеля. Он уже в древности умел многое.

Только электронные таблицы придумали и коммерциализировали задолго до Excel.

Майковские клавиатуры хороши. Windows CE и Windows Mobile были неплохи для своего времени. Средства разработки замечательны. Office 365 реально удобный. Active Directory и средства администрирования в целом неплохи для своей ниши и позволяют намышевозить то, что на онтопике приходится делать магическими заклинаниями. Игры от MS очень неплохи.

Люди сидели на говно клоне CP/M (хреновом ДОСе, даже далеко не лучшем ДОСе из существовавших) и нахлабученной сверху венды3.11-98, дико ублюдочной системы в целом.

Угу, только вот сидели на железе, на котором надежная и безопасная OS/2 тормозила, надежная и безопасная NT тормозила, надежные и безопасные юниксы тормозили. И даже клиент-серверная архитектура Иксов считалась оверхедом, отжиравшим ценные мегабайты оперативки.

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