Источник: СNEWS
Сразу стоит сказать, что ОС Phantom, которую готовит к выходу российский разработчик Дмитрий Завалишин, существует лишь в виде прототипа. Но прототипа уже вполне работоспособного, который позволяет говорить о возможностях системы.
По словам автора проекта, ОС Phantom предназначается, в первую очередь, для промышленного использования. Она может заинтересовать банки, военных, возможно, операторов дата-центров и энергетиков. Но это потом, а пока давайте посмотрим на то, что предлагает операционная система.
Это новый проект?
Нет, наоборот, работу над ОС автор проекта начал еще в начале 2000-х, в течение нескольких лет работы велись не особо активно. После 2010 года Дмитрий Завалишин решил перевести операционную систему на коммерческие рельсы и перенес все работы в «юрисдикцию» своей же компании, которая называется Digital Zone.
На данный момент основной прототип готов к запуску в виде пилотных проектов. К концу года будет готова и версия на базе микроядерной ОС Genode — сейчас ведется работа по портированию виртуальной машины системы Phantom для использования в окружении ОС Genode. Портирование заключается в создании «прослойки», которая реализует низкоуровневые примитивы ядра Phantom. Они, к слову, реализованы через аналогичные примитивы ядра Genode.
По словам разработчика, базовая версия операционной системы «включает в себя два слоя – традиционный слой кода, который управляет „железом“ компьютера, и, собственно, слой реализации сущности ОС». Первый слой в этом случае — работа с процессором, контроллером памяти, драйверами устройств и т.п. Все это есть в любой другой операционной системе.
Базируется операционная система на управляемом коде и концепции персистентной виртуальной памяти. Ее предполагается использовать в носимых и встраиваемых устройствах. Что касается кода проекта, то он распространяется на условиях лицензии LGPL.
Возможности системы и нюансы ее работы
Главная особенность ОС — использование концепции «все есть объект» вместо «все есть файл». Соответственно, система дает возможность обойтись без использования файлов за счет сохранения состояния памяти и непрерывного цикла работы. Все приложения в среде ОС не завершаются, и приостанавливают работу. Ее восстановление выполняется с прерванной точки. Все связанные с определенным приложением переменные и структуры данных хранятся столько времени, сколько необходимо самому приложению.
C точки зрения прикладного процесса система работает все время. Физическое выключение компьютера для ОС — фактически, пауза. Как только компьютер включают, прикладные программы работают так же, как и до отключения.
Приложения работают в общем адресном пространстве, такое решение дает возможность обойтись без переключений между ядром и приложениями. Кроме того, упрощается и оптимизируется взаимодействие между выполняемыми в виртуальной машине приложениями. Объектами они обмениваются через передачу ссылок. Что касается разделения доступа, без чего обойтись нельзя, то оно осуществляется на уровне объектов, которые можно получить лишь посредством вызова соответствующих методов. Любые данные обрабатываются как отдельные объекты.
Операционные системы — весьма интересная тема, но у нас есть и другие статьи, оцените — мы рассказываем о:
→ Маленьких «малинках» в крупном дата-центре
→ новых SoC от Apple — M1 Pro и M1 Max
→ Создании собственного корпуса для сервера
По словам разработчика, его ОС — виртуальная машина, которая с определенной периодичностью делает снимки своего состояния и помещает их в постоянную память. Такая схема работы напоминает гибернацию в Microsoft Windows. Отключение ПК или программный сбой — не проблема, ОС можно откатить ко времени последней успешной транзакции и продолжить работу.
Снимки состояния выполняются в асинхронном режиме без приостановки работы виртуальной машины. В снимке фиксируется единовременный срез.
В ОС есть и собственное ядро с реализацией потоков, менеджера памяти, сборщика мусора, механизмов синхронизации, системы ввода/вывода и драйверов для работы с оборудованием. Об этом уже говорилось выше, ядро позволяет использовать систему для работы с самыми разными задачами. Что касается компонентов с сетевым стеком, графической подсистемой и интерфейсом пользователя, то их развивают отдельно.
Зачем портировать систему?
Разработчики отмечают, что портирование виртуальной машины Phantom для работы с использованием компонентов открытой микроядерной операционной системы Genode необходимо для повышения стабильности, безопасности и переносимости проекта. Уже подготовлено сборочное окружение на базе Docker для тех пользователей, кто желает провести несколько экспериментов с Phantom.
Genode позволяет работать с уже проверенными микроядрами и драйверами. Так же появляется возможность вынесения драйверов в пространство пользователя. Одна из возможностей — работа с микроядром seL4, которое прошло математическую верификацию надежности.
На данный момент виртуальная машина Phantom может работать в 64-разрядном окружении Genode. Правда, разработчикам нужно еще переработать подсистему драйверов и адаптировать для Genode компоненты с сетевым стеком и графической подсистемой.
Ну а закончить обзор системы стоит словами разработчиков о позиционировании этой ОС: «Основная цель на сегодня – встроенные применения, которые требуют высокой надежности, IoT-тематика и роботы».
Комментарии (109)
vesper-bot
24.01.2022 17:58+5Ну, она может запустить Quake. Неплохо :) А умеет ли она, скажем, запускать программы на WinAPI? А как она выдерживает крэши по питанию? Долетает ли до процесса какая-либо информация о том, что ОС была остановлена/выключена в течение нескольких дней? Или хотя бы информация об изменении системного времени? Как, если вообще, работает она с HDD, раз уж у неё persistent memory? Что такое «процессы максимум приостанавливаются», если в коде стоит явный вызов, скажем, System.exit()? С разбегу ещё вижу в этой ОС потенциал для реализации double spend, ака возможности сохранить состояние в середине транзакции приложения, после чего вызвать OS crash dump/power cycle и продолжить выполнение с того же места в условиях изменившегося состояния окружения.
forthuser
24.01.2022 19:05+7Ну, она может запустить Quake. Неплохо :)
KolibriOS тоже это умеет из коробки. ????
fk0
25.01.2022 04:00Сохранить состояние в середине транзакции умеет CRIU в линуксе, например. Ну не совсем полностью конечно, впрочем как и Phantom OS видимо (т.к. для сетевых соединений решение с персистентностью просто невозможно). gdb умеет записывать состояние и откатывать назад. Идея персистентности на уровне отдельного процесса не требует специальной отдельной ОС. Да в конце концов VirtualBox умеет снапшоты записывать...
igorp1024
25.01.2022 10:39Думаю, тут всё же не полная аналогия.
Virtualbox'у, чтобы сохранить снепшот, нужно определённое время, прямо пропроциональное объёму памяти виртуальной машины. Если правильно понимаю, в статье подразумевается чуть ли не фоновое сохранение, без ущерба быстродействию.UPD: Т.е.:
>Снимки состояния выполняются в асинхронном режиме без приостановки
работы виртуальной машины. В снимке фиксируется единовременный срез.
dartraiden
24.01.2022 18:09+23Я даже помню мегасрач на Хабре про эту ОС в далёком 2009…
AVX
24.01.2022 21:14+9Linux слишком плохо развит чтобы на нем можно было делать чтолибо серьезное.
«Невозможно конкурировать с Windows, повторяя её. Невозможно
конкурировать с Windows, создавая функционально более слабую систему,
такую, как Linux.»цитата с той статьи. Что-то они ошиблись. Сильно ошиблись. Сейчас уже (моё мнение) развитие линукс и виндов идёт в сторону сближения, и вероятно когда-то родится их полный гибрид. И уж точно нельзя говорить, что линукс плохо развит. Даже тогда, в 2009 году, я уже как пару лет на домашнем ПК сидел под линуксом. Без винды и дуалбута.
Может быть, я сейчас так же ошибусь, если повторю на новый лад ту цитату: Phantom слишком плохо развит, чтобы на нём можно было делать что-либо серьёзное. Невозможно конкурировать с Linux, повторяя каждые 10 лет, что вышла новая операционная система (а, не так - "готовится к выходу"). Невозможно конкурировать с Linux, создавая функционально более слабую систему, такую, как Phantom.
P.S. Пусть это будет моей ошибкой, и через 10 лет я ещё раз переделаю свою же цитату :)
Sequoza
24.01.2022 21:42+5линукс и виндов идёт в сторону сближения
Не совсем так. Майки хотят сделать так, чтобы линукс был не нужен в качестве самостоятельной системы, включив его в Windows.
Politura
25.01.2022 01:36+4Майки хотят сделать так, чтобы линукс был не нужен в качестве самостоятельной системы
Мне кажется правильнее так: чтоб разрабатывать под линукс было удобнее сидя в винде. А с серверов вытестить линукс они больше даже и не пытаются, наоборот, активно развивают свой .net core под линукс.
forthuser
25.01.2022 02:38А, не для того, чтобы запускать Линукс программы в рамках Windows?
P.S. Вот если данные Линукс программы массово станут собирать софтом от MS может стать, возможно, реальной бедой.Sequoza
25.01.2022 12:19А, не для того, чтобы запускать Линукс программы в рамках Windows?
Я, конечно, не знаю точно об их планах. Но со стороны это выглядит как попытка пересадить линуксоидов на винду, потому что нет смысла пользоваться одним линуксом (если только вы не евангелист какого-то дистрибутива).
Layan
25.01.2022 13:33Почему нет смысла? У нас в компании разработчики, бухгалтерия, техподдержка использует Linux. Потому что Windows не бесплатен, требователен к ресурсам, а весь софт работает или портирован, или работает на браузере.
Дома у меня лично Windows как вторая система по одной причине - гейминг.
Sequoza
25.01.2022 14:43+1Почему нет смысла? У нас в компании...
Я говорил про домашнего пользователя, а на работе
У нас в компании разработчики, бухгалтерия, техподдержка использует Linux. Потому что Windows не бесплатен
Windows стоит копейки для предприятия, если брать уже с системным блоком (если конечно же предприятие это не 10 человек). Самое главное, админов винды можно нанять за миску супа, линукс же просят уже деньги. Год работы Linux админа и на разницу зп можно уже сотню лицензий купить.
требователен к ресурсам
Возможно, но, можете меня назвать зажравшимся, если у вас проблемы с производительностью ос на работе, то, как правило вашему пк больше 6 лет и его хорошо бы обновить.
а весь софт работает или портирован, или работает на браузере.
Логично, что вам тогда можно юзать Linux, но вот некоторые пользуются продуктами Autodesk и тут засада.
Дома у меня лично Windows как вторая система по одной причине - гейминг
У меня также было, но потом подумал, зачем мне дуалбут, если есть wsl2? Не поймите меня неправильно, я не топлю за винду, но майки избавили меня от необходимости держать две системы и подкупили удобством.
Aldrog
25.01.2022 17:01+1У меня также было, но потом подумал, зачем мне дуалбут, если есть wsl2?
А я не понимаю, зачем нужен дуалбут, когда есть Proton. Сближение по факту идёт с обеих сторон, и зачастую уже можно просто использовать ту ОС, которая лично вам удобнее.
Layan
27.01.2022 12:33У меня также было, но потом подумал, зачем мне дуалбут, если есть wsl2?
Все просто, многие игры устанавливают античиты, да и в принципе многие издатели были замечены за подозрительной активностью на ПК. Поэтому Windows — песочница, где можно запускать все для развлечений.
Но серьезные данные — только на зашифрованной системе с Linux, где запускаются более-менее доверенные приложения.
acmnu
25.01.2022 09:46+1У меня создается ощущение, что Windows больше не в приоритете у MS: главное для них облачные технологии. Поэтому они начали раскручивать проекты типа Microsoft 365 (не путать с Office 365) и портировать софт на Linux.
Sequoza
25.01.2022 14:57Уже не найду, но проскакивала инфа, где MS получает большинство доходов как раз с офиса.
acmnu
25.01.2022 17:27Это давно было. Где-то в начале века. А последние годы клауд в топе. Если я правильно понимаю этот отчет https://www.microsoft.com/investor/reports/ar21/index.html, то направление "Intelligent Cloud" дает 42% Income и 24% Revenue.
miga
24.01.2022 22:26+5Вся эта локальная персистентность - это, конечно, очень актуально в эпоху, когда все распределенное и доступность меряют стойками, очередями и целыми датацентрами
AcckiyGerman
24.01.2022 22:54+1И поверх всего этого добра запускают виртуалки с кубернетисами, для того, чтобы в первую очередь достигнуть декларативно описанного состояния системы (то есть абстрагироватся от всех этих файлов, виртуалок, стоек, очередей и датацентров) (а во-вторую - получить авто-скалирование в ширину).
Мне кажется персистентные (а в идеале иммутабельные) обьекты и программы из них идеально ложатся на параллельно-распределенные вычисления (и потому для таких задач и популярны хаскель, скала и эрланг).miga
24.01.2022 23:03+6Хорошо абстрагироваться получается только для стейтлесс нагрузки.
А вот когда появляется (многотерабайтный) стейт, внезапно оказывается, что компьютеры ломаются, сеть не очень-то и быстрая, да и вообще скорость света на масштабах континента не очень-то и большая. Тут-то все красивые абстракции и начинают яростно течь :)
Gordon01
24.01.2022 23:50-1А вот когда появляется (многотерабайтный) стейт
А кто виноват?
khajiit
25.01.2022 09:20Тот, кто решил вместо файла-вебстранички сохранить все 60ГБ, съеденные хромым, сохранить, очевидно.
vikarti
25.01.2022 21:43А это вот так плохо?
Вот типовая (и более менее решаемая хромом) задача.
5 окон и в сумме 500 вкладок.
надо стейт этих вкладок сохранить хоть по минимуму, чтобы можно было переоткрыть и поставить в прежнее место даже после креша хоста.
И работает.khajiit
26.01.2022 00:36Ну, как бы, есть разница между персистентным стейтом приложения (то, о чем вещал OP, и что обсуждается, емнип, в ветке) и сериализацией состояния (против которой OP выступал).
Второе, естественно, будет гораздо компактнее.
miga
25.01.2022 10:38+2Я имею в виду "стейт" в самом широком понимании. БД, которой пользуется приложение - это тоже его стейт, только вынесенный наружу.
От данных, очевидно, никуда не деться - программы их обрабатывают :)
vikarti
25.01.2022 21:46Маленький пример — почтовый сервер, с несколькими пользователями, у каждого архив почты лет так за 10 (под сотню тысяч сообщений+аттачи).
И сколько это в сумме занимает? А если надо искать и фильтровать?
Если несколько пользователей — то тут не терабайты, а вот если несколько сотен пользователей то уже появляются терабайты.Большой пример — Например желающие иметь свой поисковик по хотя бы паре десятку миллионов документов. Лучше — больше. И нужно индекс обновлять, показывать превьюшки, искать наконец по нему.
И нет, "возьмите реляционную базу данных" это не ответ, тут специальные структуры (Hadoop/HDFS изначально под подобную задачу в рамках проекта Nutch был создан)
Igorgro
24.01.2022 22:35+4Странно, на сайте написано что проект с открытым исходным кодом под LGPL, но на гитхабе github.com/dzavalishin/phantomuserland последний коммит от 2019. Что-то не сходится. Может спросить у автора? dzavalishin
saibaneko
25.01.2022 10:27Код проекта распространяется под лицензией LGPL, но последнее изменение в основном репозитории датировано ноябрём 2019 года. Связанная с проектом публичная активность сосредоточена в репозитории с форком для Genode, который с декабря 2020 года поддерживает Антон Антонов, студент из университета Иннополис.
Jury_78
24.01.2022 22:43Главная особенность ОС — использование концепции «все есть объект» вместо «все есть файл».
Неужели python? :)
forthuser
24.01.2022 23:45Вероятней Smalltalk?
P.S. Неизвестный Smalltalk
Автор этой статьи на нём сделал программу FlProg (среда разработки VisualWorks)
(файлы проектa flp в формате текстовых sixx файлов для хранения объектного представления схемы)
для PDP-11 была сделана и вроде объектная ОС на Smalltalk (DCIM?)
Gordon01
24.01.2022 23:43Приложения работают в общем адресном пространстве, такое решение дает возможность обойтись без переключений между ядром и приложениями.
Так можно делать, только если написано на безопасном языке.
kunix
25.01.2022 00:05+3Интересно, как персистентность сочетается с необходимостью в периодическом сбросе состояния системы (перезагрузке и т.д.)
kmeaw
25.01.2022 00:44+2Так же, как персистентность файлов в привычных нам ОС сочетается с необходимостью в периодическом сбросе состояния системы путём её переустановки.
vikarti
25.01.2022 21:52Я же правильно понимаю что если я диск с этой системой вытащую из машины с AMD Ryzen 5 1600 (6C/12T) и 64 Gb RAM, и воткну в китайскую двухсокетную мать с двумя Xeon'ами (28C/56T) то она спокойно заработает без проблем?
Нет? Как это нет? Намного более примитивная Win11 это почти нормально перенесла.
checkpoint
25.01.2022 02:51+3Есть пара вопросов:
Что является исполняемым кодом и на каком языке его пишут для ОС Фантом ? Если это байт-код ориентированная VM (как например Inferno и его Limbo), то все как бы понятно. Но если это настоящий машинный код компилированный из C/C++, то совсем не понятно.
Как достигается контроль за исполнением кода и какой у этого дела оверхэд ?
UPD: Прочитал первоисточник, вопросы отпали.
fk0
25.01.2022 03:55+8Насколько, интересно, персистентность совместима с тем фактом, что любая программа имеет по меньшей мере одну ошибку (вроде, (C) Дейкстра) и, следовательно, рано или поздно -- развалится.
Или хуже того, будет память утекать. Или ещё что-нибудь утекать. Файл дескрипторы, ресурсы какие-нибудь, да мало ли что. Смешно сказать, но у Java/C# тоже есть утечки. Не явные, но есть. Какие-нибудь там ключи в ассоциативном массиве, строки и т.п.
В итоге значительная часть программ, не зависимо от языков программирования и сред разработки вынуждена периодически перезапускаться. Иначе что-нибудь сломается. Потому, что программы не абсолютно идеальны, а скорей каждая программа имеет какие-то проблемы, которые на сколько-нибудь заметно большом сроке работы скорей приведут к аварийному завершению.
В каком-нибудь линуксе с этим просто. Отработала программа и на выход. А потом всё с начала. Благо программы умеют какую-то выжимку из своего внутреннего состояния записывать в файл. И потом другая, новая, исправленная версия программы может этот файл проинтерпретировать и продолжить работу, например.
А тут, в Phantom OS как? Если нет файловой системы? Один раз запустили -- и это на всю жизнь? Ни обновить, ни перезапустить? Мне кажется файловая система, база данных или что-то вроде того неизбежно появится.
Тогда зачем персистентность, если программы можно просто перезапустить? Тем более, что вот такое волшебное восстановление после выключения питания, например, оно и не особо нужно, всё равно многим потребуется какое-то событие, сигнал, чтоб адекватно продолжить работу. Те же сетевые соединения -- давно разорваны и их не восстановишь, время -- перескочило вперёд... Просто восстановить замороженное состояние -- мало кому нужно, многим нужны свои специфические механизмы восстановления состояния (заново открыть сетевые соединения, а там протокол какой-то свой специфический, да масса всего).
В итоге персистентность и отсутствие файловой системы каждутся конечно интересными идеями, но больше для научно-исследовательских задач, чем для практических.
kmeaw
25.01.2022 09:43Утекать может и место на диске. Наверняка у вас где-нибудь в $HOME/.config/ и $HOME/.local/share/ есть целые директории, которые созданы программами, которые больше не установлены в системе. И ошибки тоже могут накапливаться (хотя и с меньшей вероятностью, так как кода, меняющего персистентное состояние меньше), если они являются частью персистентного состояния - чтобы бороться с этой проблемой, Firefox при восстановлении после сбоя каждый раз спрашивает, хочет ли пользователь восстановить ранее открытые вкладки.
Если у программы есть два места, в которых хранится состояние - персистентное (диск) и оперативное (регистры, память, состояние объектов ОС), то программисту каждой такой программы придётся заботится о явной синхронизации этих мест. Ошибки её реализации возникают настолько часто, что у спидраннеров есть даже специальный термин - save/load abuse.
semmaxim
25.01.2022 13:02Вместо перезапуска программы будет её переустановка. Сериализуется объект "настройки" куда-нибудь (в какой-нибудь системный "реестр" или "хранилище настроек"), программа переустанавливается и новая версия подтягивает этот объект.
puyol_dev2
25.01.2022 11:17+1Это же какой объём оперативной памяти надо, чтобы держать всю систему, включая программы и их данные, в ней. Да и со слепками не очень ясно. Если они постоянны, то будет генерироваться огромный i/o, что довольно быстро выведет из строя SSD
blind_oracle
25.01.2022 13:13-1Это поделие ориентированно больше на эмбеддед и прочий ИоТ как я понял. Там с этим попроще.
divanus
25.01.2022 12:51Ставлю автору ОС самый жирный лайк из всех возможных. И желаю , чтобы юрисдикция его компании была безопасной.
lorc
26.01.2022 02:21Критики подхода как-то забывают что вот такие приложения с перситентностью окружают нас везде. И имя им: веб-приложения. Практически тот же подход — получаем каким-то образом (окей, по сети, но современные фреймворки абстрагируют это) граф объектов, работаем с ним, сохраняем обратно.
Я не помню что-бы тот же Gmail работал с файлами. У него есть объекты-адрессаты, объекты-письма, объекты-аттачи. И ничего, работает же. Та же фигня с мобильными приложениями: мало какой софт показывает юзеру ФС. Есть целые онлайн-CAD, хранящие сложные документы перситентно. Про Google Docs я вообще молчу.
В общем, на самом деле идея вполне себе рабочая. И довольно близка текущему поколению пользователей.
khajiit
26.01.2022 10:08Персистентность означает, что приложение запускается один раз за всю жизнь.
Если жизнью считать исключительно срок жизни вкладки до засыпания — то вы правы.Но тогда персистентны даже программы под DOS ))
lorc
26.01.2022 13:52Персистентность означает, что приложение запускается один раз за всю жизнь.
Если жизнью считать исключительно срок жизни вкладки до засыпания — то вы правы.Да нет, почему же. Я могу открыть вкладку c Google Document вообще на другом компьютере и продолжить писать ровно с того места где я закончил на другой машине. Он подтянет все состояние документа кроме разве что позиции курсора. Почти 100% персистентность. Не только во времени, но и в пространстве.
khajiit
26.01.2022 14:21Не совсем.
Если у вас пропадет сеть, то вы не сможете продолжить писать ровно с того места где я закончил на другой машине.
Потому что SPA запущенные на разных устройствах вообще ничего не знают друг о друге и общего у них — только сериализованный стейт, синхронизирующийся посредством третьего участника: облака.
khajiit
26.01.2022 12:58У него есть объекты-адрессаты, объекты-письма, объекты-аттачи. И ничего, работает же.
Так сериализация-десериализация во все поля. Никакой передачи объектов напрямую, все через json — и это отлично видно в dev-console браузера.
Мобильные приложения вообще мимо: во-первых, у них есть доступ к файлам. Во-вторых, они хранят свои данные в БД, зачастую в нескольких.
lorc
26.01.2022 13:54Так сериализация-десериализация во все поля. Никакой передачи объектов напрямую, все через json — и это отлично видно в dev-console браузера.
Ну это терминологический спор уже. С одной стороны само название JSON говорит что он Object. С другой - сериализация\десериализация скрывается где-то на нижний слоях, бизнес-логика про нее ничего не знает.
khajiit
26.01.2022 14:30+2Это фундаментальные различия, скрытые под слоем сахара.
Фактически, это разница между синхронизацией представлений фуллстейта одного приложения (ближайший аналог — передача снепшотов ОЗУ, вам нужен InfiniBand для этого) и передачей абстрагированного сериализованного представления модели, из которой этот фуллстейт может быть восстановлен.
Разницы как между Колизеем и его чертежом.
Krey
26.01.2022 10:29+1Сишного кода в репозитории 94%, так что я не понимаю о каком управляемом коде идёт речь. В сравнении например с такими проектами как singularity, midori, verve, cosmos
sborisov
и
Интересно как память виртуализируется, если пространство общее, и как реализована защита процессов друг от друга?
Kotofay
Процессы не работают напрямую с адресами памяти а только с объектами. Перечислить или как то получить объекты другого процесса не представляется возможным.
QtRoS
Это в теории, а как на практике устроена защита? Архитектура "колец защиты" в современных процессорах реализована хардварно. Неужели она никак не используется?
Kotofay
Отчего же не используется, используется, как минимум для защиты драйверов друг от друга, реализации уровней самой операционной системы.
Архитектура процессора для фантом-ос не имеет никакого значения. Считайте что API для OS это Java-машина и глубже вы никуда не можете проникнуть на уровне пользовательской программы.
К этому всему великолепию прилагается персистентность данных программ. Сразу отпадает такой атавизм как файлы данных для хранения результатов и промежуточных состояний программы.
Программа оперирует объектами-данными не имея нужды сохранять/загружать своё состояние из каких то файлов.
А просто порождая нужные и удаляя ненужные объекты.
О всём остальном заботится операционная система. делая снимки состояния процессов и сохраняя их на диск или в сеть или в любое другое энергонезависимое хранилище.
Идея сделать оригинальное API для операционной системы были не единожды, навскидку могу вспомнить планшет ASUS Eee Note, у которого всё API это Qt фреймворк.
QtRoS
Написанная на ...? Собственная разработка или адаптированный HotSpot?
А если софт банально вошел в неисправимое состояние? "Семь бед - один reset", помогает на практике. Без возможности сбросить внутреннее состояние софта, без адекватного контроля за местами сохранения этого состояния - софт становится неуправляемым.
<sarcasm>Иногда бывает хочу файлик закинуть на флешку/телефон/облако, а потом как вспомню, что атавизм, все желание пропадает</sarcasm>. Так это работает? :) Вокруг реальный мир, в котором люди к файлам привыкли: сохранять, копировать, шарить в конце концов. Как без них?
Видимо неспроста в прошлый раз был холивар по теме, как подметил @dartraiden
Kotofay
Сарказм это хорошо, но кто мешает представить любой "файл" на любом носителе как объект? ЕМНИП это было ещё в OS/2.
Файлы и файлоориентированность современных ос это тяжкое наследие из прошлого века. Это факт.
kAIST
Я помню что одно из преимуществ данного подхода, это отсутствие необходимости сериализации, типа в современных программах save/load занимает приличный процент кода.
Но ведь это все равно придется делать, потому что кроме внутреннего представления данных в программе, нужно же это дело как то отправлять по сети и пр.
0xd34df00d
Писать целую операционную систему ради того, чтобы не писать
deriving (Generic, Binary)
?Gordon01
Некоторые вообще вот так делают: https://github.com/emilk/eframe_template/blob/master/src/app.rs#L4
QtRoS
Вам и @impwx: давайте разбираться, о чем ведем беседу. Файлы устарели или способ работы с файлами устарел? Сами по себе файлы как сущности в окружающем нас информационном пространстве никуда не денутся в обозримом будущем. При этом с ними и правда можно работать абстрагировавшись некоторым объектным менеджером. Но атавизмом такой подход файлы не делает. Надеюсь, удалось донести мысль.
P.S. А что по остальным вопросам?
Kotofay
Да, имелись ввиду файлы как последовательность байт.
Ведь, согласитесь, сохранять сложную и разветвлённую структуру состоящую из множества объектов, контейнеров и зависимостей в последовательность байт -- ещё то удовольствие.
Ещё меньшее удовольствие во всей этой сериализации -- сохранять обратную совместимость.
Поэтому не проще ли вообще отказаться от самих понятий -- "сохранить в файл", "сериализовать в поток или в строку"?
Программа создавая объекты не будет беспокоиться о том, чтобы их куда-то сохранять или преобразовывать для передачи, а будет просто их создавать, ими манипулировать, передавать по сети, экспортировать доступ другим программам, удалять в конце концов?
Да, файловая система UINX, NFS, /proc и /dev это был прорыв в файловых системах. Но сами файлы и необходимость сериализации никуда не делись. Т.к. файл это не объект и не может содержать ссылок на другие файлы(объекты), а если и может то это уже не файл а (под)каталог.
saege5b
Вот мне пришло на почту "КомерческаяЗаявка._слепок_памяти_состояний_.".
У меня обычная, рядовая ОС. Как мне открыть творчество ПрогрессивнойПродвинутойБезопастнойОперационнйСистемы?
По тому же текстовому файлу, сразу столько много вопросов возникает...
yasha_akimov
Я не вполне понимаю, в чем проблема. Если в вашем предложении заменить слово объекты на слово файлы, то в принципе ничего не поменяется. Ну просто, нам всё так же нужно присвоить объекту имя и найти для него свободный участок в памяти диска, никаких отличий от файла. Нам всё так же нужна система каталогов, чтобы упорядочивать эти объекты. Нам всё так же нужны кнопки сохранить и загрузить, чтобы приложения могли обмениваться данными.
Опять же, как вы собираетесь отказаться от сериализации. У вас есть какое то там сложное дерево из объектов, построенное одним приложением, вы хотите открыть его в другом приложении. Вам всё равно придется делить общий функционал по работе с данной структурой данных, от сериализации это отличается только промежуточным представлением и никакого упрощения не создает.
Опять же, есть две разные программы, которым нужна разная структура данных, упс, нам опять понадобилась возможность преобразовывать типы объектов, как и с файлами.
Ну и по поводу ссылок внутри файла. У каждого файла уникальный путь, вот вам пожалуйста и однозначная ссылка на другой файл, магия, правда.
Kotofay
Система каталогов не привязана к файлам ну вот никак.
Файл в каталоге вообще может не существовать на диске но при этом быть прочитанным, верно?
Далее.
Отказ от сериализации/десереализации это отказ от кода который надо поддерживать, просто взяли и выбросили. Меньше кода -- меньше проблем.
Насчёт разных программ вообще всё просто -- если программы хотят взаимодействовать друг с другом по данным им нужно определить какие характеристики объекта они считают общими и частными и соответственно изменять их не ломая совместимость друг с другом. А где тут сериализация в файл?
А не нужна она, если объект в памяти представлен "как есть", со всеми ссылками, атрибутами и прочим наполнением. Одна программа позволяет другой программе открыть указанный объект, всё. Либо программа экспортирует объект в общий реестр данных -- полный аналог современной ФС, и объект может быть открыт любой программой.
А уж что там внутри -- программа либо пользуется метаданными о типе объекта либо разбирает его самостоятельно на составляющие, благо у объекта есть для этого вся информация, например как в JSON или XML.
Не надо ёрничать. Ссылка на один файл в другом файле невозможна без потери ссылочной целостности.
Т.к. не может быть представлена вне логики ФС.
Разве текстовый файл содержащий строки с полными путями каких либо файлов станет изменяться если будут изменяться имена этих файлов в ФС?
Очевидно что нет. Следовательно, файл не может содержать ссылки на другие файлы, это будет просто текст.
Gordon01
Так я же его не руками пишу, он из библиотеки берется
Kotofay
А я просто
implements Serializable
. И что?А в С/С++ это всё нужно ручками делать.
vlad-kras
Объясните, что такое переименование файла (объекта) с точки зрения фантомной ОС?
У меня файл-объект "Родительский" содержит ссылку на "Дочерний". Если я изменяю содержимое "дочернего" файла, то меняется содержимое "дочернего" объекта и заодно родительский объект увидит изменения. Если я удаляю "дочерний" файл, то его содержимое становится в некотором смысле пустым, а содержимое дочернего объекта внутри родительского тоже станет пустым. Пока вообще не вижу разницы реализовано это через файлы или объекты.
Теперь я переименовываю дочерний файл и после этого содержимое дочернего файла для родительского файла тоже становится пустым, т.к. дочерний не найден. Насколько такое поведение ожидаемо, вопрос другой. Но когда я переименовываю дочерний файл, это означает что я хочу видеть его с другим названием и при этом видеть как файл - поименованную область диска. Что такое переименование дочернего объекта для ООП?
При переименовании файла в винде кликая на ярлык файла со старым именем винда говорит примерно, что файл был удален но потом шаманит - и файл найден. Так что прослеживание переименований вполне возможно.
Kotofay
Поясните, в терминах ООП, что такое родительский/дочерний файл?
Содержимое дочернего файла может иметь в себе ссылку на любой другой файл?
Или вы придумали свою реализацию объектов в файловой системе? Я к фантому никакого отношения не имею. Поэтому не могу сказать как там устроено отражение объектов на дисковую память.
yasha_akimov
А вот у меня 4к изображение несжатое в оперативке висит, его мы так же в чистом виде на диск запишем ?
Замечательно, это и называется сериализацией. Мы запаковываем данные в некоторое промежуточное представление, задаваемое стандартом.
А вот у меня 90% ссылок используются только внутри моей программы и только в рамках текущей сессии, смысл их сохранять для всех ?
То бишь нам все же нужно ручками вытаскивать нужную информацию из объектов, так же как и из файлов. Ну и чем тогда это отличается от работы с файлами, у файлов так же есть метаданные, с ними так же можно взаимодействовать.
А вы хоть представляете себе накладные расходы на сохранение этой ссылочной целостности.
Kotofay
Конечно представляю.
Делал такую древовидную БД, где хранились миллионы объектов связанных друг с другом. И ссылались на себя, на соседей, на детей и потомков. И всё с учётом ссылок. Всё сидело в оперативе, и сериализация этого всего выливалась в проблему при сохранении на диск или передаче по сети. Были перепробованы различные методики, библиотеки, СУБД, но ни одна не устраивала по скорости доступа к элементам. А счёт шёл на доли микросекунд. Если бы это всё было сделано на файлах и mmap, а такой вариант персистентного хранилища в рамках этой разработки тоже был -- то ни о каких микросекундах там и не могло быть и речи.
Это не называется сериализацией. Это передача объекта по ссылке или по значению.
khajiit
То есть, сперва сделали такой дизайн, который может жить только в RAM
а потом удивились тому, что создали его таким.
Nuff said.
Это в пределах одного адресного пространства работает. То есть в пределах только приложения или, в лучшем случае, нескольких приложений, поддерживающих механизм shared memory.
Как только вы выйдете за эти пределы — все, привет.
А вообще, гляньте в сторону Distributed Erlang — это, хотя бы, реальнее всепланетного финика.
SpiderEkb
Не совсем так. Файл это просто некоторое множество байтов, с которым каждый может делать все что угодно (в рамках своих прав доступа к нему).
Вот винда. Вот .exe файл. Фактически это программа. Но никто не мешает открыть ее HEX редактором и подправить в нем пару-тройку байтиков.
Объект это уже не просто множество байтов. Это во-первых, типизированное множество байтов, а во вторых, это множество байтов, для которого разрешен вполне опледеленный набор операций. И если объект имеет тип *pgm (программа), то открыть его hex редактором уже нельзя - операция редактирования для типа *pgm запрещена системой. И никакой сериализации для объекта данного типа нет и не будет.
Если у вас есть объект типа *file с атрибутом pf-dta - физический файл (хранилище) данных, то для него уже разрешено редактирование, сериализация и т.п. А если это объект типа *file, но с атрибутом lf (логический файл, определяющий порядок доступа к содержимому одного или нескольких физических файлов), то там уже свой набор операций будет.
Т.е. суть "объекта" в строгой типизации и строгом наборе разрешенных с ним действий.
SpiderEkb
Здесь понятие "объект" несколько иное чем возможность содержать ссылки на другие объекты.
Объект характеризуется именем, типом и свойствами. Имя можно менять, тип задается при создании и изменен быть не может. Свойства могут изменяться или не изменяться.
Каждому типу объекта предписан допустимый для этого типа набор операций. Например, объект типа "файл данных" может быть изменен. А объект типа "программа" изменен быт не может - операция изменения для этого типа запрещена на уровне системы.
На самом деле тут вижу попытку скрестить ежа с ужом. Есть "объектные ОС" - например OS/400 от IBM (нынче оноа называется платформа IBM i). Вполне себе живая концепция того, что "все есть объект" со своей файловой системой и т.п.
И есть микроядерные - та же QNX.
Что здесь не совсем понятно - общее пространство памяти. Что будет, если программа падает? Нагадит она остальным или ее можно безболезненно снять, как снимается задание в job isolated системах?
invasy
«Просто» создавать, манипулировать, передавать по сети, удалять — это как? Необходимость сериализовать «объекты» куда-то делась?
khajiit
Файл это просто поименованная последовательность экстентов.
Будете ли вы обращаться к ней как
%APPDATA%\%APPNAME%\some\long\path
или как~/$APPNAME/some/long/path
илиthis.some.long.path
или дажеOS.System.AppData.(tags=('some', 'long', 'path'), mode=('rws'))
— нет вообще никакой разницы.Kotofay
С обращением проблем нет. Адресовать файл не сложно, сложно уложить в него структуру данных.
khajiit
Хм.
С одной стороны есть теоретически неограниченное пространство от 0.
С другой стороны есть теоретически неограниченное пространство от 0.
Взять бинарь из одного, положить в другое…
Ну, окей, пусть не бинарь а объект. У которого, кстати, каждый property может ссылаться на разные куски памяти — очевидно, что его нельзя просто так взять и сохранить а потом восстановить: во-первый, это будет огромный кусок, содержащий, в основном, нули. Во-вторых, не факт вообще что у приложения в следующий раз будет выделено ровно столько памяти и она будет распределена точно так же.
Значит, его сперва надо привести к последовательно-упорядоченному виду: сложить все его потроха по порядку, друг за другом. Т.е. сериализовать. Чтобы потом менеждер памяти мог объект раскидать обратно, оставив его пригодным к использованию.
Kotofay
А зачем? Что мешает сохранять объект как есть постоянно в памяти? Вы же не разбираете пылесос после уборки? Просто ставите в шкафчик.
Аналогия полная.
khajiit
То, что объект как целое это абстракция.
Разыменуйте поля/свойства/методы — и вы получите полный скаттер. То, что разыменование скрыто от программиста, это не значит, что его не происходит. По сути, вы хотите дополнительный слой абстракции, который спрячет от вас (де-)сериализацию, чтобы было удобнее всегда воспринимать объект как единое целое.
Представьте себе, что комната — это память процесса. Ее можно расчертить на квадратики, по сантиметру, пусть каждый квадрат это ячейка. Если ячейки пронумеровать, последовательно, одну за другой, вы получите уникальный адрес для ячейки.
Теперь положим в угол кусочек сантиметровой ширины ленты — это ваш объект. Точнее, это первый, видимый, его vtable. В обхекте нет данных — только числа, удивительно похожие на адреса, которыми вы пометили ячейки в "комнате". Вы берете число, находите соответсвующую ему ячейку где-то в другом углу — а там еще одна такая полоска, потому что на самом деле у вас не данные записаны, а вызывается геттер/сеттер. Найдя ленту с кодом геттера вы должны исполнить ее инструкции, и только потом получите очередной номер ячейки, из которого уже возьмете интересующее вас значение.
И это если сильно упрощать.
Ваш условный пылесос никогда не существовал как целое, понимаете?
И не будет, пока вы его не сериализуете.
Kotofay
Спасибо что расписали двойную косвенную адресацию, но это уже пройденный этап для меня.
Такие реализации были придуманы и довольно давно и не мной. Ознакомьтесь если интересно:
http://www.garret.ru/~knizhnik/post.html
https://github.com/knizhnik/POST--.git
http://www.garret.ru/~knizhnik/goods.html
khajiit
К этой реализации неизбежно приводит наследование.
Оно 12 лет как заброшено.
KanuTaH
Угу. Это если брать сферический пылесос в вакууме. Теперь берем реальный пылесос и оказывается, что ему нужно питание, а чтобы он получал питание, ему нужен шнур, включенный в розетку (условно, аналог поля с указателем/ссылкой на другой, независимый, объект, ага?). Чтобы дверца в шкафчике закрывалась, шнур надо выключать из розетки и сматывать, а при повторном использовании пылесоса - соответственно, разматывать и подключать. Вы можете, конечно, никогда его не выключать, сделать специальную прорезь для шнура в дверце, и считать, что проблема решена... До тех пор, пока вам не потребуется перевезти пылесос в другую квартиру и подключить его к местной розетке.
Kotofay
А объект в памяти это не сферический пылесос? Зачем тут лишние вводные типа шнура? Вы объекты в памяти в розетку не включаете ведь.
В природе он не существует, зачем его разбирать? А вот только для того, чтобы было удобнее его хранить в последовательности байт, с адресацией отличной от той в которой он был порождён?
Это же лишний слой хранения пылесоса который по возможности нужно убирать. Что и демонстрирует нам Фантом-ОС.
KanuTaH
Это для теоретиков - больших любителей сферических объектов в вакууме (Спольски называл таких "архитектурными астронавтами") они "лишние", а в реальности ситуация, когда частью инварианта объекта является ссылка/указатель на другой объект, отнюдь не редки. И этот инвариант надо поддерживать. Сохранения объекта просто в виде кучки байтиков для этого совершенно недостаточно.
Фантом-ОС пока ничего толком не демонстрирует. Очередной теоретический долгострой от энтузиаста с весьма туманными перспективами.
impwx
Если для данной системы существует некий "объектный менеджер", который может просматривать \ изменять \ копировать \ удалять произвольные объекты, так же как в обычной системе файловый менеджер может делать все это с файлами — почему нет?
lorc
Это пока кто-то не найдет дыру, позволяющую читать/писать по абсолютному адресу. Учитывая, что без интеропа с сишным кодом не обойтись — такая возможность рано или поздно появится.
С другой стороны — это не general purpose OS, так что это не особенно страшно. Так понимаю, там будет запускаться строго ограниченный набор софта, без возможности установки пользователем чего-либо.
Kotofay
А разве в управляемом коде есть возможность работать с адресами напрямую? Вроде нет, да и изоляцию процессов никто не отменял. Ну был же симбиан, полностью java-os, таких проблем не наблюдалось.
KanuTaH
Вы что-то путаете. Symbian был вполне классической ОС с вытесняющей многозадачностью и защитой памяти различных процессов друг от друга.
Kotofay
Да, точно, спутал с JavaOS.
lorc
Ну прямой возможности — нет. Поэтому я и говорю про дырку. Где-то забудут проверить границы массива, например.
А насчёт изоляции процессов — так пишут же что все приложения работают в общем адресном пространстве.
Gordon01
В целом — норм, только, как обычно, работать все это будет небыстро
Psychosynthesis
Не очень понятна концепция "всё есть объект". Означает ли это, что физически файлы на диске не хранятся? Если так, восстановление данных с дисков такой операционки представляется сущим адом.
Если же файлы на диске всё-таки хранятся в стандартном для файлов формате, тогда выходит не "всё есть объект".
acmnu
Кстати любопытно, а используются ли кольца полноценно в других операционках. На сколько я знаю (на начало 2000х), на практике использовалось только 0 и 3 кольцо, а 1 и 2 не нашло применение в меинстриме, хотя Интел их и тащит для обратной совместимости.
QtRoS
Не, не используются в большинстве своем. Слышал байку про самобытную ОС под конкретную задачу с 3 кольцами защиты, но деталей предоставить не могу.
Gordon01
Используется только 0 и 3
fk0
Насколько я помню -- JIT компиляция. Вообще строго говоря, таким образом можно построить систему обеспечивающую изоляцию процессов на процессоре не обладающем аппаратными механизмами защиты. Идея в том, что компилятор просто не генерирует "недопустимого" кода.
Да, код может будет не очень эффективный компилироваться, но с другой стороны такой процессор может быть проще устроен и работать на более высокой частоте, или иметь больше ядер, или исполнять большее количество инструкций впраллель...
Лично моё мнение -- будущее может быть таким, что "кругом будет сплошной webassembly". Может не именно webassembly, но какая-то похожая технология. Аппаратно-зависимый машинный код останется только в JIT-компиляторе и драйверах совсем низкого уровня. И гегемония интела на этом может кончится. Будут процессоры на совершенно разных архитектурах, но при этом будет некий единый managed-рантайм. Вряд ли .NET или Java, скорей что-то, что станет международным стандартом, что нельзя запатентовать и обложить данью. Что все могут без ограничений использовать в своих продуктах. Пока на это больше похож webassembly. Для программиста там будет тот же C++, C#, что угодно. Важно что целевая платформа у всех будет единая, стандартная, виртуальная и не соответствующая аппаратной платформе. И у каждой аппаратной платформы свой JIT-компилятор.
MaM
Ну примерно так https://habr.com/ru/post/579876/