Вопрос к программистам

Обсуждаем тут с [info]golergka систему App Store — эппловский магазин софта для яблофона. Суть моих претензий к этой системе состоит в том, что участие в ней для программиста сопряжено с совершенно кабальными, по меркам shareware, условиями. Распространение программы требует регистрации разработчика в iPhone Developer Program, которая стоит минимум 99 долларов в год. Комиссия Apple, взимаемая при продаже программ, составляет 30%. Программа может быть отклонена по множеству причин. Как утверждает Макс, все это делается для того, чтобы программы для iPhone удовлетворяли некоторым «стандартам качества». По результатам обсуждения мы пришли к выводу, что «стандарт качества» для программ сводится к «поставилась-запустилась-удалилась-систему-не-запортила».

Теперь собственно вопрос. Представим, что в России окончательно победил православный национал-коммунистический ядерный техно-фетишизм. В Москва-реке живут нано-крокодилы, вокруг растут пальмы, в небе летают дирижабли и мезосферные агрессоры, вместо окончательно разрувшившегося нового корпуса истфака МГУ построен Биореактор, где [info]hirou с академиком Петриком варят лекарство от бессмертия для кошек Куклачева, а лично вы разрабатываете Русскую ОС для Душевного Компьютера, предохраняющую жизнь пользователей от стрессов и депрессий(c). Для предохранения пользователей от стрессов нужно сделать интерфейс (не пользовательский, а системный, если че) установки программ и API со следующими свойствами:

— любая программа гарантированно устанавливается и удаляется, не запортив при этом систему
— всевозможные «временные файлы» и прочий хлам, создаваемый программой, может быть удален вместе с ней; после операций установка-запуск-удаление система должна возвращаться в первоначальное состояние
— существует механизм цифровой подписи программ, позволяющий проверить целостность и отсутствие модификаций в программе (добровольный и со множеством сертифицирующих центров — от Патриархии, до, к примеру, академика Петрика :) Представляю надпись на коробке с антивирусом Касперского: «Благословлено лично Патриархом» :) )
— попытки программы выполнить действия, характерные для вредоносных программ, могут быть заблокированы; заведомо вредоносные программы установить невозможно
— нельзя запустить программу, которая установлена не через данный интерфейс
— и последнее требование, отличающее данную защищающую от стрессов систему от App Store: вся эта штука децентрализована, позволяет получить дистрибутив программы из любого источника, а «гарантии» правильной установки-удаления осуществляются техническими средствами, без проверки человеком

Как вы считаете, можно ли на современном уровне развития технологий реализовать систему, удовлетворяющую этим требованиям?

Вопрос к программистам: 17 комментариев

  1. Если это дело свести к виртуальному интерпретатору (по типу нынешней java), то вполне можно. Но потребуется унификация железа, тестирование на совместимость и т.п. Плюс создать программу обычному Васе Пупкину будет жутким гемором.

    1. Насчет виртуального интерпретатора — есть мысли, как обойтись без него, пока озвучивать не буду, интересно посмотреть на предлагаемые варианты.

      Про унификацию железа пока забудем :)

      «создать программу обычному Васе Пупкину будет жутким гемором» — думаю, при использовании IDE нынешнего уровня включить в Build автоматическое создание установочного пакета (для «временной» установки) вполне можно.

  2. насчёт малоубиваемости — minix 3 (ОС микроядерная, там всё работает как простые пользовательские процессы, даже драйвера устройств. В ядре (примерно 4000 строк С-кода) из «левого» только сервер часов; вне ядра есть «сервер реинкарнации», который перезапускает сбойные процессы)
    а вот насчёт децентрализованности… Если только cms какую прифигачить к системе, причём прозрачно для лемминга :) Такие децентрализованные есть (названия не помню в виду того, что я их не пользую)

      1. если помрёт — его перезапустит сервер реинкарнации
        А если оная подсистема сглючит в винде? :)

        1. Откуда она его возьмет, чтоб перезапустить? Как минимум несколько секций исполняемого файла все равно придется перечитать заново с диска.

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

          Так что в этом смысле микроядерные системы ненамного лучше традиционных.

          1. посмотрите конкретную реализацию а потом умничайте :)
            Журналируемые ФС не зря придуманы
            И сервер реинкарнации вполне нормально всё перезапускает, ежели чего…
            Весь софт в Minix3 приспособлен к перезапускам

  3. ещё вспомнил. Типа такого есть — ОС для учебных недобуков OLPC
    которая на основе системы SUGAR

    Интересная реализация незначительной части идей Джефа Раскина

  4. Есть ещё и другие соображения.
    Например, этот подход позволяет Apple отвечать не только за функционал приложений, но и за содержание контента (offensive, возрастной рейтинг). А также не пропускать приложения, конкурирующие с уже имеющимся у телефона функционалом.

  5. 1. Легко. Наиболее очевидное решение — система с поддержкой снапшотов, как UFS или ZFS, может как-то и проще можно. Либо полностью декларативный и верифицируемый манифест инсталлятора (и скорее всего не допускающий тьюринг-полных программ).
    2. Если допустим вариант «программа, создающая временный файл не там — идет в жопу» — то, очевидно, легко.
    3. Ну какая-нибудь публичная PKI.
    4. Дайте точное определение «заведомо вредоносной программы».
    5. Если допустимо разделение программ на два сорта, то очевидно, легко. Ну можно и не делить, но разработчики ОС вас проклянут.
    6. Равнозначно созданию абсолютно надежной защиты от дурака, причем инициативного дурака.

    1. 4. К примеру, детектируемая как вредоносная каким-нибудь эвристическим антивирусным алгоритмом. Даже во времена Pure DOS они уже довольно надежно ловили всякую заразу, а уж в нынешних системах с усложнением прямого доступа к железу эта задача становится намного легче (к примеру, «безусловный» вызов функции низкоуровневой записи на диск — «хватать и не пущать», и тому подобное).

      1. Я не представляю алгоритм, способный отличить программу, рекурсивно проходящую по дереву каталогов в $HOME и синхронизирующую (в обе стороны) его с удаленной бэкапной копией, от программы рекурсивно проходящей по дереву каталогов в $HOME и убивающей случайно выбранные файлы. Или, чтоб уж совсем неотличимо было, коннектящейся к вредоносному серверу и слушающей оттуда голоса, которые ей говорят что убивать.

        И, да, задача защиты системы решается проще — полным запретом юзеру писать в системные каталоги. Здесь речь только о защите юзерских данных, к которым по определению есть полный доступ.

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

Добавить комментарий для ext:ex0-planet@lj Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *