Пока тут в соседнем треде обсуждают веб 3.0, изложу-ка я уже свои мысли, которые давно у меня копились в голове, но никак не получалось их структурировать. Вдруг кто оценит.
Disclaimer: автор данного поста весьма плохо разбирается в теории, не говоря уж о практике
На мой субъективный взгляд, развитие современных операционных систем заходит в тупик. Всё сильнее прослеживается тенденция превращения системы в пускалку браузера, в котором уже выполняется большинство повседневных задач. Облачные сервисы и социальные сети прочно вошли в обиход многих пользователей, и всё это весьма плохо интегрировано в ОС, оставаясь где-то внутри браузера.
С другой стороны можно наблюдать мобильные ОС, где на замену сайтам созданы клиенты к тем же социальным сетям и облачным хранилищам, и эти клиенты уже куда удобнее в использовании (как минимум лучшей интеграцией в ОС).
Разве это не замечательно — заменить сайты на локальные приложения с обменом данными с серверами? Для чего же насиловать JS и HTML, изобретая всё новые костыли и всё сильнее удаляясь от натива, получив взамен дизайн «кто во что горазд» и страшные тормоза?
Добро пожаловать в моё видение будущего ОС и веба:
- Никаких сайтов. Операционная система пускает браузер. Браузер запускает приложения и сервисы, максимально абстрагированные от внутреннего устройства ОС, используя API самого браузера.
- Сам браузер — это связка оконного менеджера, тулкита и стандартного интерфейса (типа стартовой страницы).
- Интерфейс приложений пишется на декларативном языке, логика на скриптовом, библиотеки, требующие оптимизации, (в идеале) компилируются в язык типа LLVM, который транслировался бы в бинарный код уже на машине клиента; если такое невозможно, то распространяются в виде бинарных пакетов для конкретных платформ, на которых запускается браузер.
- Приложение может работать в двух режимах: удалённом и локальном. В удалённом режиме приложение хранится на сервере, клиент получает файл интерфейса, браузер его отрисовывает, взаимодействие между интерфейсом и библиотеками происходит через какой-нибудь WebSocket. Как только мы хотим загрузить приложение себе на локалхост, чтобы можно было работать с ним в оффлайне, браузер получает и хранит у себя связку интерфейса и логики приложения, с определённой периодичностью опрашивая сервер на наличие новой версии.
Важный момент — максимальная абстракция приложений в браузере от ОС при сильной привязке к архитектуре браузера. Т.е. в идеале приложения одинаково работают хоть под линуксом, хоть под виндой, просто внутри браузера, за которым не видно остальной ОС, который по сути своей подменял бы графический интерфейс той ОС, которая его запустила (если таковой вообще был).
Язык написания интерфейсов должен быть абстрагирован от пикселей в пользу физических величин типа тех же сантиметров. При этом создающий дизайн должен сам учитывать пропорции экрана, размеры и банальные интерфейсы взаимодействия пользователя и системы (будь то тачскрин, трекпад, мышка, клавиатура или даже в отдельных случаях геймад — учитывать надо как можно большее количество вариантов).
Сам браузер должен быть хорошо масштабируем под самые разные устройства. Для упрощения масштабирования приложений крайне желательно экспортировать меню приложения в браузер, чтобы он сам выбирал, как и где его отрисовывать в зависимости от устройства.
Теперь об облаках и том, каким должен быть браузер:
- Браузер должен быть своеобразным провайдером различных сервисов. Будь то социалки типа вк и твиттера, будь то облачные хранилища типа Google Drive или Dropbox, будь то даже магазины музыки типа iTunes или игр типа Steam. Всё, что должен делать браузер — это быть провайдером ко всем этим сервисам, позволяя этим сервисам сильно интегрироваться в среду.
- Что я понимаю под интеграцией? Положим, у вас есть несколько устройств, залогиненных под одним мета-аккаунтом. Предположим, вы выбрали некий сервис для хранения файлов в облаке. Тогда, как только вы добавите файл на одном устройстве, он сразу появится на другом. Разумеется, поведение должно быть настраиваемым. Возможно, вы не хотите автозагрузки файла, возможно, даже идея автоматической синхронизации всего вас не обрадует. Т.е. вы сами должны выбрать, что и как синхронизировать, главное — это максимальная абстракция от самих сервисов. Просто прокликал, в каких сервисах и на каких устройствах держать файлы и всё, они уже там.
- Подобным же образом должны работать социальные сети. Общий фид новостей, фотографии изо всех социалок в одном месте, даже фотографии друзей рядом. Список мета-контактов с выбором, каким образом с человеком связаться, вместо тысяч разных клиентов со своим поведением.
- Максимально возможная абстракция от файловой системы. Метки вместо каталогов.
- Поисковик можно рассматривать уже с другой стороны. Представьте себе смесь маркета с обычным поиском. Т.е. контент будет искаться по сервисам, представленным в магазине, открываться будет в соответствующих приложениях. Разумеется, должна быть возможность иметь несколько магазинов (поисковиков), но крайне желательно наличие при этом центрального типа Google Play.
- Сами приложения должны открываться как сайты нынче. Т.е. в магазине банально хранятся ссылки и отзывы к ним. Эдакий расширенный индекс сайтов. При отсутствии приложения в магазине, оно должно открываться банальным набором его адреса в адресной строке. А установленные приложения — это по сути закладки. Если приложения совсем-совсем нет в сети, то оно банально перетаскивается в систему примерно так же, как оно сделано в макоси, разве что в нашем случае перетащить нужно просто на локальную систему, а не конкретно в приложения, ибо браузер разберётся, куда класть контент.
- И, разумеется, должна быть поддержка тех, кто боится слежки. Возможность синхронизации через домашний сервер или объединением в сеть нескольких устройств с одним ключом. Как быть с покупкой приложений в таких случаях — спорный вопрос.
Из всего этого можно получить систему, ведущую себя примерно одинаково что на телефонах, что на планшетах, что на ноутах и ПК.
Как-то так. Идея не претендует всем понравиться, сама она действительно сильно напоминает какую-нибудь ChromeOS, разве что в основе её лежит идея децентрализации сервисов, а не наоборот. Хотелось бы заняться реализацией всего этого, да пока знаний не хватает, сижу вот, читаю Real World Haskell.