Спрятать панель инструментов
Вспомогательный блок сверху Вспомогательный блок слева Вспомогательный блок cправа Спрятать вспомогательный блок
Вспомогательный блок сверху Вспомогательный блок слева Вспомогательный блок cправа Спрятать вспомогательный блок

пятница, 11 декабря 2009 г.

Размышление о разных форматах исполняемых файлов и инсталляционных пакетах для разных платформ, и способе их унификации для всех платформ

Вы никогда не использовали одну и ту же программу одновременно под разные Операционные Системы?

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

Вначале о мультиплатформенных бинарниках.Представьте себе что бинарник программы(или динамической библиотеки) - это файловый контейнер в котором для каждой из процессорных архитектур есть свой каталог, в котором с свою очередь находятся модули написанные под разные ОС + код общий для разных ОС в особом бинарном формате.

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

В роли контейнера вполне сгодится zip архив с директориями и XML(или JSON) файлом для служебной информации.

Платформа для запуска нужна нужна чтобы:

  1. Открыть файловый контейнер.
  2. Прочитать служебную информацию из XML файла.
  3. Если есть модули с совместимой с нашим железом и ОС архитектурой, переходим к п.4
  4. Если есть все необходимые пакеты и модули для запуска системы - запускаем программу, нет переходим к п.5
  5. Открываем пакетный менеджер и предлагаем установить необходимые модули с подключенного носителя с ПО или сайтов с репозиториями.
Так же можно создавать инсталяционные пакеты, где будут дополнительные  служебные данные о системных требованиях, лицензии и входящих в состав программного продукта пакетах и сторонних зависимостях и рекомендованном дополнительном ПО.

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

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

Драйвера режима ядра собственно содержат код специфический для устройсва,файловой системы и т.п. и код специфичный для ядра ОС.

Так вот чисто машинный код можно теоретически использовать отдельно от специфического для ядра/ОС кода. Он практически аналогичен для всех ОС на одной аппаратной платформе. Всё что надо это прослойка между специфичным для ОС кодом и специфичным для железа или ФС кодом.

А для запуска кода программ, неспецифичного для конкретной ОС или железа можно добавить такие архитектуры как LLVM,.NET/Mono или другой платформы способной запускать код в VM или транслировать его на лету в нативный код.

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

У каждой ОС свой формат инсталляционных файлов, а то и несколько как в Linux(deb,rpm,tgz и прочии) и Windows где есть MSI, а также целый зоопарк инсталлеров в формате исполняемого файла.Среди последних Install Shield,NSIS,Inno Setup,Create Install и прочих.

И у каждого из этих типов инсталляционных файлов свой GUI, свои специфические моменты которые очень путают новичков,внося разброд и броженние в их головы.

Я думаю пришло время изменять ситуацию, стандартизировать этот процесс.Ведь без свободного обмена данными и унификации разработок огромные силы, гигантский творческий потенциал просто распыляется в никуда, а ведь эти изобретатели велосипелов могли бы придумывать новые интересные программы и концепции, обогащая всемирный фонд программного ПО.

Сторонникам чистых native решений я заявляю, что не в коей мере не призываю к уничтожению старых нативных решений, а лишь призываю к созданию ещё одного, более user friendly решения, к котором также будут заинтересованны системные архитекторы, системные администраторы, а также те кто работает с корпоративным ПО.

Кроме всего прочего файловый контейнер можно шифровать при помощи файла-ключа и таким образом зашитить проприетарные разработки от посягательств пиратов. В принципе ключи вообще могут находиться на серверах ключей компании производителя, или специальных девайсах, заточенных под конкретного пользователя, например его отпечаток, голос или (в будущем)ДНК.

В общем от таких решений выиграют и производители ПО, и пользователи, и корпоративный сектор, так что я верю что рано или поздно это станет реальностью.И подвижки в виде отдельных идей уже витают в воздухе.Ну а пока это просто моя мечта,к сожалению:(

воскресенье, 6 декабря 2009 г.

Несколько причин для знакомства с QT

Вы хотите написать программу которая будет работать под разными платформами? И будет выглядеть нативно под Windows,Linux и MacOS?В которой один код без переделок будет работать по всеми платформами?И вам нужна скорость и приличный вид вашей программы?

Тогда вам стоит попробовать библиотеку QT от Nokia.Вот некоторые из её достоинств:

1. Кросплатформенность.QT4 работает на Windows NT,2000,XP,Vista и Windows 7.А также Linux,Maemo,Haiku,MacOS X 10.6 Snow Leopard,QNX,Embeded Linux,WinCE и VxWorks.

2. Привязки к многим языкам:
  • Korundum/QtRuby для Ruby
  • Qyoto для платформ .NET Framework и Mono
  • PyQt и PySide для Python
  • QtJambi для Java
  • PHP-QT для PHP(неполная поддержка классов QT)
3. Animation Framework - с ним вы сможете анимировать виджеты своей программы с необыкновенной лёгкостью.

4. QStyle - класс для создания своих стилей для элементов GUI.При помощи CSS подобного языка вы в файле с расширением qss можете определить как должен выглядеть тот или иной элемент интерфейса. Вы можете изменить вид вашей программы простым редактирование файла qss в любом текстовом редакторе.Никогда создание интерфейсов на скинах("шкурах") не было таким простым и приятным.

5. Эффекты радующие глаз: прозрачность,тени,фильтры и свечение.

6. Фантастически мощный механизм Signal - Slot для связи событий с обработчиками событий.

7. Встроенный интернет браузер WebKit - один из лучших движков для браузеров в мире.

8. Interview framework - технология позволяющая связать отображение для таких виджетов как QTableView и QListView с моделью на основе QAbstractItemsModel или производными от неё.

9. State Machine - конечный автомат.Мы можем для каждого объекта создать определённое количество состояний и условий перехода между ними.Навесьте для каждого состояния определённые свойства на наш объект и вы почувствуете всю мощь QT.

На подходе нас ожидает декларативный UI (Declarative UI).Интерфейс можно будет создавать на основе описания его свойств. Программист будет работать со своей частью - логикой работы программы, а её видом будет заниматься дизайнер. Создавать такой UI - это как верстать HTML страницу на HTML5. Так что нас ждут фантастически выглядящие программы уже в ближайшем будущем.