Если да, то вам тоже наверно приходило в голову как хорошо было бы,если бы нашлись добрые люди и создали мультиплатформенный бинарный формат, мультиплатформенный инсталлятор программных пакетов(пакетный менеджер) и мультиплатформенные пакеты с драйверами.
Вначале о мультиплатформенных бинарниках.Представьте себе что бинарник программы(или динамической библиотеки) - это файловый контейнер в котором для каждой из процессорных архитектур есть свой каталог, в котором с свою очередь находятся модули написанные под разные ОС + код общий для разных ОС в особом бинарном формате.
Тогда всё что нужно пользователю для запуска такой программы - это установить один раз некую программную платформу для запуска таких мультиплатформенных бинарников.
В роли контейнера вполне сгодится zip архив с директориями и XML(или JSON) файлом для служебной информации.
Платформа для запуска нужна нужна чтобы:
- Открыть файловый контейнер.
- Прочитать служебную информацию из XML файла.
- Если есть модули с совместимой с нашим железом и ОС архитектурой, переходим к п.4
- Если есть все необходимые пакеты и модули для запуска системы - запускаем программу, нет переходим к п.5
- Открываем пакетный менеджер и предлагаем установить необходимые модули с подключенного носителя с ПО или сайтов с репозиториями.
При запуске такого инсталлятора можно запустить инсталляционную программу из недр пакета, установить в изолированное окружение для избежания проблем с безопасностью и конфликтом версий библиотек и пакетов , и наконец просто запустить пакетный менеджер для того что бы пользователь выбрал только необходимые ему пакеты и модули или доустановил что нибудь для своего пользователя или всей системы.
О драйверах.
Как известно драйвера делятся на модуль ядра и(или) юзерспейс слой, а также утилиты для конфигурирования данного драйвера с набором документации.
Драйвера режима ядра собственно содержат код специфический для устройсва,файловой системы и т.п. и код специфичный для ядра ОС.
Так вот чисто машинный код можно теоретически использовать отдельно от специфического для ядра/ОС кода. Он практически аналогичен для всех ОС на одной аппаратной платформе. Всё что надо это прослойка между специфичным для ОС кодом и специфичным для железа или ФС кодом.
А для запуска кода программ, неспецифичного для конкретной ОС или железа можно добавить такие архитектуры как LLVM,.NET/Mono или другой платформы способной запускать код в VM или транслировать его на лету в нативный код.
В общем я надеюсь что когда-то пользователи смогут импользовать один исполняемый файл, один инсталляционный пакет для разный платформ, не заморачиваясь такими тонкостями как зависимости,тип ОС или железа и прочей чушью, а просто один раз написанную/приобретённую программу сможет установить и запустить везде, где позволят аппаратные требования.
У каждой ОС свой формат инсталляционных файлов, а то и несколько как в Linux(deb,rpm,tgz и прочии) и Windows где есть MSI, а также целый зоопарк инсталлеров в формате исполняемого файла.Среди последних Install Shield,NSIS,Inno Setup,Create Install и прочих.
И у каждого из этих типов инсталляционных файлов свой GUI, свои специфические моменты которые очень путают новичков,внося разброд и броженние в их головы.
Я думаю пришло время изменять ситуацию, стандартизировать этот процесс.Ведь без свободного обмена данными и унификации разработок огромные силы, гигантский творческий потенциал просто распыляется в никуда, а ведь эти изобретатели велосипелов могли бы придумывать новые интересные программы и концепции, обогащая всемирный фонд программного ПО.
Сторонникам чистых native решений я заявляю, что не в коей мере не призываю к уничтожению старых нативных решений, а лишь призываю к созданию ещё одного, более user friendly решения, к котором также будут заинтересованны системные архитекторы, системные администраторы, а также те кто работает с корпоративным ПО.
Кроме всего прочего файловый контейнер можно шифровать при помощи файла-ключа и таким образом зашитить проприетарные разработки от посягательств пиратов. В принципе ключи вообще могут находиться на серверах ключей компании производителя, или специальных девайсах, заточенных под конкретного пользователя, например его отпечаток, голос или (в будущем)ДНК.
В общем от таких решений выиграют и производители ПО, и пользователи, и корпоративный сектор, так что я верю что рано или поздно это станет реальностью.И подвижки в виде отдельных идей уже витают в воздухе.Ну а пока это просто моя мечта,к сожалению:(