- То есть будет собственная оконная система?
- Да. Она уже в какой-то степени есть, и не так уж много кода X Window, который было бы интересно в неё тащить. А делать X Window — это довольно серьёзная задача, которая, я боюсь, не окупится. Ну и, кроме того, есть довольно много кода, написанного под вещи типа SVGALib, который вполне можно портировать под «Фантом». То есть framebuffer и прочие инструменты обмена мы сделаем.
- Но программы, написанные под X Window, придётся модифицировать?
- Придётся модифицировать, да. В текущей ситуации мы не видим достаточной необходимости делать эту часть работы. Мы больше ждём, что программы, написанные за последнее время будут реализованы скорее для Java SWING, чем для X Window.
- Но у такого подхода должны быть и плюсы. Вы говорите, что под «Фантом» легче писать программы. Легче и дешевле. Кроме сохранения состояния это в чём-то проявляется?
- Это дешёвая компонентность. Собственно, вся история программных инструментов, если взять некоторую стартовую точку — когда появился первый компьютер и за него сел первый программист, написал для него первую программу. (Эта программа была написана в некоторой модели, в которой есть только этот программист, только эта программа и этот компьютер, который полностью ей отдан.) Начиная с этой точки и до сегодняшнего дня всё, чем занималось программистское сообщество — это развитие модели, при которой программист может писать меньше и использовать больше чужого. Современные языки программирования, языки программирования вообще, библиотеки, фреймворки, операционные системы — всё это было сделано для решения ровно одной вещи — сделать так, чтобы можно было написать три строки кода, а 333 строки были бы чужими. Это делается всегда ровно одним способом (хоть он и по-разному реализован в разных местах) — дать программисту компоненты, которые он воткнёт в свою программу.
Собственно, я считаю, что успех Unix как операционной системы связан в первую очередь с тем, что Unix предложил возможность сборки утилит командной строки в «пайпы». Таким образом он породил первую командную среду в истории разработки софта. Хоть до него и были библиотеки, но он стал первой средой, где этим мог управлять пользователь. То есть можно взять две вещи, написанные разными людьми, и склеить их воедино, чтобы решить свою третью задачу. Причём, опять же, это не некоторая абстракция. Даже в те годы в ЦСУ СССР была реальная разработка под Unix, для которой использовали утилиты командной строки. Там была обработка статистики, которая делалась этими «грепами», «сортами» и прочими утилитами, которые позволяли данные, представленные в виде текстовых табличек как-то обсчитывать, форматировать и печатать.
То, что мы делаем — это новый шаг в ту сторону; он отличается от того, что существовало, благодаря глобальному адресному пространству. Мы говорим, что всё, что у нас есть в системе, можно использовать. То есть можно достучаться до чужих данных (с учётом желания того, кому они принадлежат, их вам отдать, конечно — в этом смысле «Фантом» система очень защищённая), но если две программы желают обменяться данными, то это можно сделать очень дёшево, очень эффективно и с произвольной степенью сложности.
В современных системах это просто невозможно. Грубо говоря, если работает программа Word, в которой существует документ, представленный в виде некоторого графа объектов, поделиться фрагментом этого графа объектов с другой программой Word не сможет. Потому что видим граф только в рамках одного адресного пространства. Word может его сериализировать, свернуть, засунуть в какую-нибудь трубочку, передать через «пайп», но это всё тяжко и требует того, чтобы обе программы понимали один протокол. Ну, к примеру в Windows есть протокол OLE, который такие возможности предоставляет. Но программ, которые его поддерживают, мало, потому что он сложный. И все такие протоколы сложны. Второй пример — это CORBA, который вообще шикарный инструмент — он платформонезависимый, но примеров его реального использования — единицы, потому что это сложно.
Та же задача в рамках «Фантома» решается одной единственной строкой кода: передачей указателя на произвольную группу объектов. После чего они напрямую доступны во всей своей сложности. То есть сложность этого «интерконнекта» мы понижаем не просто в разы, а на порядки. Мы ожидаем, что это даст существенный эффект.
Видно, что на сегодня потребность в компонентной среде велика, это решают почти все современные инструменты. Если взять сообщество Java, то оно этому посвящено почти во всех своих направлениях. Можно взять другую часть мира — Windows, C# и инструменты, которые существуют для него, — они тоже направлены на это.
- Не похоже ли это на среду Smalltalk?
- Похоже. Очень похоже. Вы абсолютно правы, это так и есть.
- Но в качестве отправной точки была избрана именно Java?
- Нет, у нас среда как раз языкоагностическая, мы не завязаны на Java. Просто Java Virtual Machine на сегодня используется для очень большого количества современных языков — более 200 языков имеют трансляторы в JVM, а это значит, что если поддержать её, то мы поддержим и это огромное количество языков. Для нас это будет наиболее эффективным путём. Поэтому дело не в самой Java, а в виртуальной машине.
- Как я понял, разработка «Фантома» пока находится на очень раннем этапе. Ядро ещё не устоялось?
- Год назад я бы сказал, что ещё на очень раннем этапе. Сейчас у меня у самого возникает ощущение, что мы уже существенно ближе к реальности. Ядро — не сказать «не устоялось» — в нём есть много вещей, которые требуют доработки, переработки или просто развития, но «не устоялось» сказать уже нельзя. Потому что если говорить про среду исполнения прикладного кода, то за последний год она не изменилась ни на байт. То есть, вообще говоря, устоялось именно с точки зрения внешнего интерфейса. От него мы существенных изменений уже не ждём.
- И вы уже не боитесь, что в погоне за идеалами окажетесь в той же ситуации, что и Столлмен со своим Hurd?
- Как вам сказать... Конечно, боимся. Это, кстати, ещё одна из причин, по которой я начал делать систему. Сложность того, что я сейчас про неё понимаю, превысила возможность головного мозга, она сегодня в него уже не вмещается. До какого-то уровня я понимаю, как и что в ней происходит, а дальше — нет. И поскольку проверить это хочется, её пришлось сделать, чтобы понять, что будет дальше.
Конечно, я могу предсказывать будущее только на какую-то глубину, а дальше может выясниться, что есть вещи, про которые я не подумал, и они каким-то образом всё загубят. Но на сегодня я таких вещей не вижу.
У нас была одна очень крупная проблема, которая меня поставила на грань вопроса о реализуемости проекта — это было год назад, и мы это место прошли. На сегодня я не знаю ни одного принципиального момента, который мог бы сделать эту задачу нереализуемой. Есть, конечно, вопрос о том, в правильном ли направлении я вообще двигаюсь. Вдруг никакого будущего у проекта нет? Думаю, что это не так.
Я абсолютно уверен, что я двигаюсь в правильном направлении — этому можно привести довольно много аргументов. Наверное, самый вразумительный из них — это то, что компания Microsoft движется в том же направлении. Я думаю, что ни у кого в этом мире нет сомнений в том, что компания Microsoft знает, где искать деньги в разработке софта. Про то, что они делают, можно говорить самые разные вещи, их можно ругать или хвалить, говорить, что есть не очень удачные инженерные решения среди принимаемых ими, но Microsoft как одна из крупнейших компаний, занимающихся разработкой софта, чётко понимает, что и как устроено с точки зрения бизнеса, где дешевизна, и как до неё добраться. То, что мы с ними существенно совпадаем, убеждает меня в том, что я прав.
Здесь, как мне кажется, правильной будет такая метафора: если какой-то человек вдруг скажет, что знает, как сделать производство автомобилей на тридцать процентов дешевле, к нему сразу же подбегут человек сто с разных сторон, попытаются порвать его на куски, и кто-нибудь один да утащит его в «Тойоту» или в «Форд», чтобы он сделал то, что хотел. Потому что все понимают, что тридцать процентов дешевизны — это значит убить весь рынок и съесть всех. В софте ситуация несколько мягче, но, тем не менее, она тоже критична.
Ещё один пример — когда лет десять назад появилась Java (как язык программирования), производительность программ на Java была катастрофически хуже, чем производительность программ на C++. Что не помешало Java «вынести» C++ просто с корнями. Можно считать, что C++ сейчас не существует, а Java сегодня — язык номер один. Если Java сегодня кому-то и сдаёт, то только C#, который, в общем-то, в существенной степени является её клоном. Почему это случилось? Потому что Java дала при провале на старте по скорости (сейчас она его уже наверстала) существенные преимущества по скорости и дешевизне разработки. И это решило спор в её пользу. Я полагаю, что у принципов, которые лежат в основе «Фантома», те же самые шансы.