- BrainTools - https://www.braintools.ru -

Как превратить Linux в Windows

Тезис: следует создать такой дистрибутив Linux, который по умолчанию выполняет двоичные файлы Windows через Wine.

❯ Рабочее окружение Linux нестабильно

Если я найду файл в формате .exe, которому 20 лет, я по-прежнему смогу запустить его на современной Windows. Попробуйте проделать подобное с двоичным файлом Linux, которому всего год. Совершенно не гарантированно, что он запустится, в зависимости от того, какие обновления успели произойти. Также не гарантируется, что заработает даже сегодняшний двоичный файл Linux, если собрать его в одном дистрибутиве, а попытаться запустить на разных других дистрибутивах. Возникает ровно такая же проблема, связанная с версиями установленных библиотек.

Притом, что системные вызовы Linux как таковые очень стабильны и надёжны, такого не скажешь [1] об установленной поверх них библиотеке на c. Пользовательское пространство в Linux практически полностью основано на libc, следовательно, эта проблема совместимости бинарников распространяется и на весь Linux.

❯ Проблема, связанная с распространением двоичных файлов

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

  1. Сырой бинарник. Если бы этот вариант работал, то никаких других решений бы не требовалось.

  2. Образ приложения (AppImage). Полностью самодостаточный артефакт, где в составе бинарника привязаны все необходимые зависимости.

  3. Flatpak. Менеджер пакетов, в котором для каждого приложения предоставляется песочница.

  4. Snaps. Ещё один менеджер пакетов, выполняющий приложения в песочнице.

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

Серьёзный недостаток всех этих методов заключается в том, что ни один из них, в сущности, не рассчитан на долговременное хранение приложений. Можно ли заархивировать приложение на 20 лет, затем вытащить из корзины и просто выполнить, не прилагая никаких лишних усилий? Может быть, при помощи AppImage? Кто знает… Но по поводу трёх остальных методов — уверенно отвечу «нет».

❯ Win32 в помощь

Несколько лет назад Арек Хилер написал статью «Win32 Is The Only Stable ABI On Linux [2]». В своих рассуждениях он абсолютно прав, и я думаю, что эта статья помогает понять суть проблемы с совместимостью в Linux. Но эта проблема решается благодаря гениальному решению, принятому при проектировании Win32.

В Linux можно выполнять системные вызовы напрямую. Для этого нужно просто заполнить несколько регистров и сделать прерывание системного вызова.

В Windows системные вызовы напрямую не выполняются. Вместо этого требуется делать динамические привязки к библиотекам, которые уже будут выполнять системные вызовы за вас. Благодаря этому Microsoft чего только не вытворяет на уровне ядра, но при этом предоставляет стабильный API для взаимодействия с пользовательским пространством. Благодаря этому маленькому шедевру, Linux и Windows могут одновременно работать на одной и той же машине.

Если призадуматься, то оказывается, что между приложением для Windows и приложением для Linux есть лишь два серьёзных отличия. Во-первых, они используют разные форматы исполняемых файлов. Во-вторых, в Windows системные вызовы выполняются через динамически подключаемые библиотеки. Просто воспользуйтесь форматом PE вместо ELF, загрузите пару библиотек — и у вас, в сущности, получится приложение для Windows! Также существует простой способ запускать под Linux приложения для Windows — это Wine.

Wine — чудесный проект. Он обеспечивает замечательную совместимость с приложениями для Windows, прослеживаемую вплоть до времён 32-разрядной Windows 95. Wine даже реализует DirectX! Разница между тем, что поддерживает Windows и что поддерживает Wine со временем стала стремиться к нулю (особенно, если вы придерживаетесь Win32). Wine — та магия, которая поможет нам решить нашу проблему.

❯ Новый дистрибутив

Представьте, что мы собрали новый дистрибутив Linux. Этот дистрибутив будет предоставлять рабочее окружение для ПК, очень напоминающее Windows — настолько, что пользователю Windows удалось бы работать с ним без подготовки. В такой системе можно устанавливать и запускать приложения для Windows точно так, как это делалось бы в Windows; без всякой дополнительной работы. Как бы это функционировало?

В таком дистрибутиве был бы предустановлен Wine, а также содержалось бы немного небольших патчей для ядра Linux. Понадобится немного модифицировать семейство системных вызовов «exec», чтобы диспетчеризация зависела от типа исполняемого файла. В таком случае любое приложение Linux могло бы сделать форк exec для приложения Windows — без труда.

Можно задать префикс wine для каждого пользователя, и настольная среда при работе отталкивалась бы от этого префикса. Пользователю выводилась бы Windows-подобная файловая система, и в ней были бы представлены пользовательские приложения. Привычный нам Linux также был бы доступен, но скрыт за GUI, удобным для рядового пользователя ПК.

❯ Настоящая мультиплатформенность

Wine работает под Linux, FreeBSD, ReactOS, macOS, Android и Haiku. Если бы мы публиковали все наши приложения как Windows/Win32, то могли бы добиться мультиплатформенной совместимости без каких-либо дополнительных усилий.

❯ Близкое будущее

Две крупнейшие коммерческие операционные системы MacOS и Windows развиваются в одном направлении. Они всё сильнее замыкаются в себе, нарушают приватность и всё сильнее лишают пользователя возможностей управлять своей собственной вычислительной средой. Обе эти компании беззастенчиво встраивают в свои операционные системы полноценное шпионское ПО. Windows пытается делать скриншоты [3] вашего экрана каждые несколько секунд, после чего отдаёт их на анализ искусственному интеллекту [4]. В MacOS есть функция под названием Gatekeeper [5], ограничивающая выбор софта, который вы можете выполнять на своём Mac лишь теми приложениями, которые одобряет Apple. Как Apple, так и Microsoft работают над внедрением функции, позволяющей сканировать ваш компьютер на предмет «нелегальных» файлов, о которых система доложит в органы.

Эти фичи разрабатываются якобы ради удобства и «защиты детей», но в сухом остатке оказывается, что миллиарды пользователей поражаются в правах и лишаются возможности контролировать собственные компьютеры. Что произойдёт, если вы потеряете контроль над вашим компьютером? Что делать, если ваша операционная система станет предоставляться по подписке? Что будет, если вы сделаете что-то, не устраивающее эти компании — и потеряете возможность вообще пользоваться каким-либо компьютером?

Microsoft уже убирает возможность [6] работать под Windows без привязки к онлайн-аккаунту. Если вы потеряете ваш аккаунт, даже нечаянно, то не сможете войти в ваш компьютер.

ЗАМЕЧАНИЕ: я не выступаю против Apple или Microsoft. Там работают блестящие инженеры. Не считаю их злонамеренными. Но я считаю, что в этих компаниях неправильно выстраиваются механизмы мотивации [7]. По этому пути их ведут рынки и власти. Компании могли бы полностью пересмотреть свою политику и попытаться расширить возможности пользователей, но я исхожу из того, что само по себе это не произойдёт.

Вот почему я считаю, что нам нужен «Windows-подобный» дистрибутив Linux. Он решил бы не только проблему совместимости двоичных файлов, но и помог бы влиться в Linux тем пользователям Windows, которые принудительно «обновились» до Windows 11 в октябре прошлого года. Как хорошо было бы безболезненно перейти на Linux, правда?

Просто подумалось.


Новости, обзоры продуктов и конкурсы от команды  [8]Timeweb.Cloud [9] — в нашем Telegram-канале [8] 

Перейти ↩

Автор: Albert_Wesker

Источник [11]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/24966

URLs in this post:

[1] не скажешь: https://jangafx.com/insights/Linux-binary-compatibility

[2] Win32 Is The Only Stable ABI On Linux: https://blog.hiler.eu/win32-the-only-stable-abi/

[3] скриншоты: https://support.microsoft.com/en-us/windows/retrace-your-steps-with-recall-aa03f8a0-a78b-4b3e-b0a1-2eb8ac48701c

[4] интеллекту: http://www.braintools.ru/article/7605

[5] Gatekeeper: https://support.apple.com/en-us/102445

[6] убирает возможность: https://arstechnica.com/gadgets/2025/03/new-windows-11-build-makes-mandatory-microsoft-account-sign-in-even-more-mandatory/

[7] мотивации: http://www.braintools.ru/article/9537

[8] Новости, обзоры продуктов и конкурсы от команды : https://t.me/timewebru

[9] Timeweb.Cloud: http://Timeweb.Cloud

[10] Перейти: https://timeweb.cloud/?utm_source=habr&utm_medium=banner&utm_campaign=promo

[11] Источник: https://habr.com/ru/companies/timeweb/articles/991032/?utm_source=habrahabr&utm_medium=rss&utm_campaign=991032

www.BrainTools.ru

Rambler's Top100