при каждом запуске. Почему? Потому что среда не персистентна, он не может просто запомнить указатель на какой-то объект и потом снова пользоваться. Объект может пропасть, не пропасть, его нужно загрузить обязательно. «Фантом» представляет собой среду, в которой «Фотошоп» мог бы один раз найдя шрифт, потом мгновенно запускаться и сразу начинать им пользоваться, имея непосредственный указатель на этот самый шрифт.
- Не нужно ли проверить, не исчезли ли шрифты?
- Они не могут исчезнуть в «Фантоме» в силу того, как работает система сборки мусора. Пока существуют те вещи, которыми пользуются, они будут оставаться. Это вторая интересная особенность «Фантома». Если заглянуть в папку временных файлов любой Windows через год-два работы системы, то выяснится, что там миллионы страшных вещей, которые просто так валяются.
- Хорошо, но если я захочу стереть шрифт?
- Тут вот какая штука. Дело в том, что в той схеме, в которой работает «Фантом» шрифт — это объект, находящийся в рабочем пространстве системы, на который есть ссылка, во-первых, из каталога, в котором он лежит как видимый пользователю, и, во-вторых, из всех тех мест, которые им пользуются. Поэтому если вы сотрёте, он пропадёт из каталога, но пока им пользуется хоть одна программа, он будет фактически присутствовать. Скажем так, пока он будет присутствовать в документах — он будет существовать. Как только исчезнут все документы, которые им пользуются, он будет автоматически уничтожен. И это относится ко всему, что существует в системе. Если поставили новую версию чего бы то ни было, старая версия исчезнет сама, как только в ней исчезнет необходимость. И напротив, она не сможет исчезнуть, убив работу какой-нибудь программы, пока программа в этом нуждается. То есть у пользователя нет возможности испортить работу среды, сломав что-нибудь руками.
- Как на практике происходит это сохранение состояния? Система просто сохраняет всё на диск время от времени? Или как-то более хитро?
- Люди, которые занимаются операционками, довольно быстро понимают, как всё это устроено. Простыми словами рассказать это сложно, но давайте попробую. Дело в том, что состояние на диске уже лежит. В момент сохранения снэпшота происходит запись только тех данных, которые изменились с момента предыдущего снэпшота. Как правило, для обычной системы их не много. Это означает, что снэпшоты можно делать достаточно часто, а при сбое система восстановит состояние довольно близкое к тому, что было раньше.
- А программа сама контролирует, когда её объекты сохраняются?
- Нет. Этого программе вообще не видно. С точки зрения программы, она существует в системе, которая живёт вечно — для неё ничего не меняется. Я полагаю, что современные операционные системы требуют слишком обширных знаний от разработчика, и стремлюсь сделать систему, в которой многие вещи делались бы настолько прозрачно и незаметно, что просто не требовали бы даже думать о них. Это одна из причин, почему ОС называется «Фантом». В «Фантоме» автор программы вообще не должен знать, что такое диск. Он её просто пишет, она просто существует. И часть задачи просто отпадает.
Скорость, с которой система делает снэпшоты, регулируется. Можно сказать — раз в минуту, можно — вообще непрерывно. Закончился один и сразу пошёл другой. Более того, у нас есть желание сделать версию для специальных применений, в которой это будет делаться со скоростью порядка миллисекунд. То есть система будет хранить очень подробную запись того, что происходило, по методу журналирования. Раз в минуту будут делаться полные срезы, а между ними будет вестись список частых изменений. Это позволит получить на обычном «железе» систему, которая сможет восстанавливать очень близкое к моменту сбоя состояние. Но принципиально программа для этого ничего не должна делать.
- Эта непохожесть «Фантома» на другие среды означает, что старые компоненты систем Unix нельзя будет использовать? X Window, к примеру, или OpenGL.
- Вовсе нет. OpenGL у нас даже в каком-то виде сейчас есть в системе. В довольно сыром, правда.
- И это не собственная реализация, а оригинальный код, скомпилированный под «Фантом»?
- Да. Здесь есть две стороны жизни: есть объектная персистентная среда, которую «Фантом» предлагает в качестве родной. Под неё мы собираемся построить способ миграции, который позволил бы втаскивать на неё код, написанный на современных языках — на Java, Python, C#. Это очень большой объём кода, и он, на самом деле, превосходит то, что сделано для Unix. Мы считаем, что это основное направление, в котором нужно двигаться. Конечно же, мы не хотим сделать систему, для которой всё придётся писать заново. Это не оставило бы мне абсолютно никаких шансов.
С Unix ситуация вот какая. Изначально вообще не планировалось поддерживать юниксовый код, потому что родная среда «Фантома» не позволяет поддерживать старые языки программирования — такие как C и Pascal. Есть очень чёткое разделение: есть managed языки и не-managed языки. Managed-языки мы напрямую не поддерживаем. Это совершенно не проблема для современной разработки, потому что сейчас всё делается уже на managed-языках. Но есть довольно большое количество старого кода, написанного на C, на Pascal, на C++.
Изначально я предполагал, что им не нужно заниматься, ещё и потому, что за то время, которое мы будем делать стабильную версию «Фантома», мир ещё раз шагнёт вперёд, и всё старое наследние окажется совершенно неактуальным. Тем не менее, в сегодняшней стадии в «Фантоме» делается Unix- подсистема, которая позволит запускать под ним более или менее немодифицированный Unix-код, хотя X Window мы, наверное, не будем туда затаскивать.
- То есть будет собственная оконная система?
- Да. Она уже в какой-то степени есть, и не так уж много кода X Window, который было бы интересно в неё тащить. А делать X Window — это довольно серьёзная задача, которая, я боюсь, не окупится. Ну и, кроме того, есть довольно много кода, написанного под вещи типа SVGALib, который вполне можно портировать под «Фантом». То есть framebuffer и прочие инструменты обмена мы сделаем.
- Но программы, написанные под X Window, придётся модифицировать?
- Придётся модифицировать, да. В текущей ситуации мы не видим достаточной необходимости делать эту часть работы. Мы больше ждём, что программы, написанные за последнее время будут реализованы скорее для Java SWING, чем для X Window.
- Но у такого подхода должны быть и плюсы. Вы говорите, что под «Фантом» легче писать программы. Легче и дешевле. Кроме сохранения состояния это в чём-то проявляется?
- Это дешёвая компонентность. Собственно, вся история программных инструментов, если взять некоторую стартовую точку — когда появился первый компьютер и за него сел первый программист, написал для него первую программу. (Эта программа была написана в некоторой модели, в которой есть только этот программист, только эта программа и этот компьютер, который полностью ей отдан.) Начиная с этой точки и