Quasar, ты уже пробовал связаться с icculus'ом по поводу дальнейшего развития FatELF? Просто интересно чем же всё кончилось (или наоборот началось =)).
Вопрос я ему задавал насчёт юзерспейса, и как работает WINE. Узнал много интересного. Ответ на этот вопрос такой:
>Wine loads them into memory, the same way ld.so does it for regular ELF binaries. When I started working on FatELF, I was surprised to discover the kernel doesn't handle shared library loading at all...it's completely done in userspace.
То бишь в ядре нет механизма загрузки библиотек.
>I _could_ go forward without a kernel or glibc patch: binfmt_misc could be made to load FatELF binaries, and that loader could be used to get the shared libraries into memory. The problem is that we've replaced a few hundred lines of source code changes with a big, complicated project. It would have to reimplement the ld.so code from glibc, and it wouldn't benefit from fixes and improvements to the main project.
>Also, there's no way to ever make dlopen() work with FatELF files unless glibc takes my patch.
Так что если делать по подобию WINE, действительно предстоит много работы.
Также я задал вопрос о том. почему бы не пересадить всех с Direct X на WINE (чтобы писали под WINE, а не под Direct X).
Ответ получил такой:
>They'd react much like the kernel developers reacted to FatELF.
Так что тут всё сложно. Но я ещё несколько вопросов ему задам. Например, насколько трудоёмко будет сделать загрузчик FatELF для Windows. А то вообще может проще сделать метаформат.
Тогда не упёртые, а отмороженные. WINE предоставляет практически то же API, что и Direct X . Да - не в полном объёме. Но судя по тому, что вполне современные игры там работают - в достаточном.
Как вариант тогда можно поговорить как следует с CodeWeavers - может они согласятся сделать DirectX-совместимуюбиблиотеку как отдельный дистрибутив для нескольких платформ, и проталкивать её как привычное решение для написания многоплатформенных игр, и с хорошей техподдержкой. На этом можно сделать деньги, если правильно подойти к вопросу.
>Но судя по тому, что вполне современные игры там работают - в достаточном
Увы, современные игры там работают не очень хорошо. Правда, не из-за directx. С надёжностью тоже проблемы - тот же wine для виртуалбокса работет абы как. Допилить это конечно можно, но здесь серьёзный вопрос - сколько это будет стоить разработчику. И кроме DirectX иногда надо портировать много другой ерунды.
Разработчик взвешивает - возможную прибыль от линукс-платформы и затраты на портирование и поддержку.
Дайте иккулусу еще один шанс: намекните ему что нужную ему для создания установщика функциональность (вывод совместимых с текущей архитектур) можно встроить в uname из пакета coreutils. Все-равно там это все захардкодено. А вот шелл-скрипты пусть учит и не отлынивает.