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

Обсуждаем тут с [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, которая откатывает пользовательский каталог на предыдущий снэпшот.

Добавить комментарий для Шура Люберецкий Отменить ответ

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