Пользователь должен иметь возможность вызывать столько приложений сколько ему нужно, не испытывая замедления в работе. Это тот случай, когда система должна заниматься всем этим, улучшая работу пользователя, особенно, на мобильных устройствах.
Когда начиналась работа над Ubuntu Touch, главным в работе разработчиков был просто запуск системы на популярных мобильных платформах. Затем сфокусировались на использовании аппаратного ускорения для прорисовки UI, декодирования медиа и доступ с сенсорам устройства.
Теперь разработчики думают о новой модели работы приложений, которая будет сильно интегрирована с операционной системой Ubuntu Touch.
С точки зрения пользователя и разработчика цели такие:
С точки зрения системы цели такие:
Каждый пункт в списке не прост сам по себе, но они ещё связаны с друг другом, а некоторые конфликтуют с друг другом. Связать их воедино - вот задача!
Мобильные устройства обладают ограниченными по сравнению с десктопом ресурсами: CPU, системная память, GPU, видеопамять, а так же питание от батареи против постоянного подключения к сети.
Запущенные приложения конкурируют между собой за эти ограниченные ресурсы, пытаясь максимально их использовать. А пользователь в этот момент ожидает от системы плавной и долгой работы приложений от батареи. Но никто не вправе требовать от человека заниматься управлением процессами или строить в своей голове план наилучшего использования ресурсов для приложений. То есть управление процессами и работа многозадачности в новой модели должны быть прозрачны для пользователя.
Решение проблем должно вписываться в рамки:
Как сказано выше, нужно создать различные политики и динамически переключаться между ними при различных сценариях использования. Влияние на разработчиков приложений должно быть минимизировано и смена политик будет прозрачна для пользователей.
Состояния:
Прозрачный жизненный цикл программы тогда может пониматься так. Приложения должны уметь сохранять (и впоследствии воссоздавать) своё состояние, до перехода в не запущено. Это показано пунктирными линиями на диаграмме. Всем переходам предшествует уведомление приложения, что оно вот-вот будет остановлено или убито. Своё состояние приложение может сериализовать в "архивный" файл на некоторый период. После чего приложение реально попадёт в не запущено. Когда приложение "воскреснет", Ubuntu восстановит состояние приложения из "архивного" файла. На диаграмме видно, что если политика управления жизненным циклом будет работать, то для убитых и остановленных программ нужно сохранять их состояние.
На основе модели можно начать формировать политики, которые будут управлять переходами приложения из одного состояния в другое.
Поведение классического десктопа так же легко описать и создать для него политику. Текущая политика, используемая в Ubuntu Desktop, никогда не срабатывает при переходе из состояния запущено в не запущено и не ограничивает приложение в ресурсах, когда оно не в фокусе пользователя.
Политика v1.0 для мобильных платформ определена как очень строгая. Всем приложениям не в фокусе не гарантируется что они останутся в состоянии запущено и не начнётся их переход в не запущено для агрессивной экономии ресурсов. Уже сегодня приложениям не в фокусе посылается SIGSTOP для остановки, а в дальнейшем, при не хватке памяти, приложения будут убиваться до того, как за них возьмётся OOM Killer.
Почему так строго? Ресурсы мобильных платформ относительно скудны и управлять ими нужно более эффективно, не отдавая на откуп кривонаписанным программам-пожирателям-памяти.
Было множество дискуссий между разработчиками по поводу такой строгой политики v1.0 для начального старта и её различных сценариев использования. Большинство ситуаций легко разрешимы если логика приложения разделена на движок (engine) и графическую часть (UI).
Отделение логики программы от уровня представления считается хорошей практикой при разработке ПО. Опора на движок (фоновый сервис) позволяет приложению-UI избежать ловушки, диктуемой нашими политиками. Приятный побочный эффект - легко тестируемый код.
Как работает эта строгая политика v1.0 в Ubuntu Touch? Система обеспечивает набор системных услуг, которые охватывают основные сценарии работы пользователя типа таких:
С политикой v1.0 сторонние приложения не смогут устанавливать свои фоновые сервисы (движки). Однако Ubuntu Touch предоставит механизм, который будет передавать движки программ системе для выполнения их в фоне, что и позволит сторонним приложениям не в фокусе работать в фоне и выводить запланированные события.
Дополнительные материалы:
Mir наступил в Ubuntu 13.10.
Ubuntu Desktop обновляется поэтапно.
Представлен новый механизм обновления Ubuntu Touch.