Мигель де Икаса создал целый ряд громких проектов: GNOME, Mono, Xamarin, Midnight Commander… Для одних айтишников это человек-легенда, сделавший поразительно много для опенсорса и .NET-экосистемы. Другие ничего не знают о нём, но постоянно пользуются плодами его трудов.
На Хабре есть множество постов с его упоминанием, но не было поста о нём самом. А завтра Мигель выступит на нашей конференции DotNext, и я решил, что это отличный повод исправить ситуацию.
Как человек, создавший GNOME, мог оказаться в Microsoft? СЕО какого ключевого IT-проекта современности долго был его главным сподвижником? Почему Ричард Столлман назвал Мигеля «предателем сообщества свободного ПО», а некоторые другие говорят, что он всю жизнь занимается клонированием?
Начало
Де Икаса родился в Мехико в 1972-м. Он получал высшее математическое образование, но так и не завершил обучение: поворотной точкой в его судьбе стал момент, когда он наткнулся на манифест GNU.
Его поразила готовность GNU Project бесплатно делиться сложным софтом вроде компилятора: тогда продукты подобной сложности обычно продавались за деньги, очень весомые по мексиканским меркам. Мигель с удовольствием использовал чужие открытые наработки и ощущал, что в ответ обязан внести собственный вклад в проект.
Повод вскоре возник. Ранее при использовании DOS он успел привыкнуть к Norton Commander, и в UNIX-среде ему страшно не хватало такого двухпанельного файлового менеджера. Он обсудил это со Столлманом, засучил рукава, и в 1994-м первым его заметным вкладом стал GNU Midnight Commander — вариация на тему «Нортона».
Midnight Commander на современном 5K-экране
Сейчас, спустя десятилетия, этим продуктом по-прежнему ежедневно пользуется множество людей, включая самого Мигеля. Как говорит он сам, если смотреть на соотношение затраченных усилий и полученной отдачи, то mc — самый успешный проект за всю его жизнь.
Можно назвать Midnight Commander клоном, но вряд ли его автора это заденет. Де Икаса и не претендовал на оригинальность, а вместо этого решал практическую задачу: если есть две хороших вещи из разных миров, как их совместить и пользоваться преимуществами обеих сразу? По сути, этот же подход проявился и во всей его дальнейшей деятельности. Пока многие люди привязаны к одной платформе и считают остальные «вражескими», Мигель видит хорошее в разном и охотно приносит чьи-то идеи с одной платформы на другую, став своеобразным «королём портирования».
Следующей его заметной задачей после Midnight Commander стала работа над переносом Linux на SPARC. И благодаря этому опыту в 1997-м его позвали на собеседование в Microsoft (там тогда хотели принести Internet Explorer в том числе на SPARC). Казалось бы, для ценителей свободного софта эта компания на тот момент была обителью зла, как в принципе можно было задумываться о работе там? Но Мигель не делил мир на чёрное и белое, а искал возможности изменить его в лучшую сторону: отправившись в офис компании, он там уговаривал сотрудников Microsoft освободить исходный код IE.
Вот это он опередил время — компания полюбила опенсорс парой десятков лет позже. И её сотрудником Мигель стал парой десятков лет позже. А в 1997-м устроиться в Microsoft ему не удалось по формальным причинам: с неоконченным высшим образованием мексиканцу было не получить американскую рабочую визу.
GNOME
После выхода Windows 95 стало очевидно, что Linux на десктопе очень уступает проприетарному конкуренту. В 1996-м появился проект KDE, призванный сделать так, чтобы в Linux всё наконец выглядело консистентно и приятно. Он стал набирать популярность — казалось бы, можно только порадоваться. Но когда де Икаса обратил внимание Ричарда Столлмана на этот проект, тот заметил, что зависимость от Qt делала KDE несвободным. Попытка Мигеля связаться с авторами Qt (чтобы для этого случая было отдельное лицензирование) не увенчалась успехом. И возникла новая практическая задача для GNU: «сделать среду с преимуществами KDE, но свободную». Получается, что и здесь во многом был перенос чужого опыта на новые рельсы.
В 1997-м де Икаса и другой мексиканский разработчик Федерико Мена с благословения Столлмана взялись за задачу. И в 1999-м была выпущена первая версия GNOME (поначалу название означало «GNU Network Object Model Environment»). Интересно, что важным достижением GNOME Мигель считает не только сам продукт, но и организационную структуру с советом директоров — по его словам, впоследствии это повлияло на многие другие опенсорсные проекты, включая .NET Foundation.
А про первую версию GNOME он иронично замечал, что она опередила моду на градиенты и виджеты («в панели задач могли выполняться самые разные процессы, вот на скриншоте рыбка, она просто плавала и всё»):
В связи с GNOME Мигель писал ещё и программу Gnumeric. Здесь тоже был прямой аналог чужой работы: автор и сам сравнивает этот проект с Excel (с уточнением, что кое-что у него тогда получилось лучше, чем у Microsoft). Мигель вложил в Gnumeric немало сил, но позже прекратил его развивать (и за дело взялись другие люди). По его словам, это произошло не по собственной воле: когда шли переговоры с Sun Microsystems об открытии исходного кода StarOffice (так появился OpenOffice), Sun поставили это условием.
Открытый код — это прекрасно, но надо было на чём-то и зарабатывать. Мигель объединил усилия с человеком, которого знал по IRC-сети LinuxNet — Нэтом Фридманом. Вместе они создали компанию, которая поначалу называлась «International GNOME Support», позже переименовалась в Helix Code, а затем стала называться Ximian.
Как можно понять по первоначальному названию, идея была в том, что раз GNOME открыт и бесплатен, можно зарабатывать на вещах «вокруг» него вроде поддержки.
Но через пару лет Мигель представил новый проект, который был уже совсем не просто «поддержкой GNOME»...
Mono
На дворе самое начало нулевых. Microsoft стандартизовали свою новую платформу .NET, тем самым позволив другим разработчикам создавать её независимые имплементации, но компания всё ещё никак не ассоциируется со словом «открытая». Что в такой ситуации могло заставить линуксоидов, связанных с GNOME, обратить внимание на .NET? Зачем притаскивать в Linux что-то настолько далёкое от него?
Мигель объясняет это так. В Ximian ощущали, что неудобно писать всё на С/С++, и согласились с дихотомией Аустерхаута: если для основополагающих вещей хорошо подходят системные языки, то вот для высокоуровневого «склеивания» этих вещей лучше подойдут языки попроще и поудобнее. Но какой именно язык для этого взять?
Сам Аустерхаут для этого создал Tcl, но Столлман велел не использовать Tcl в рамках GNU Project (породив тем самым большой холивар). Альтернативы вроде Python и Scheme оказались недостаточно производительными (вспомним, что в те времена компьютеры были куда менее мощными, чем сейчас). И вот тут-то новая платформа от Microsoft с новым языком C# обратила на себя внимание.
Казалось бы, линуксоидам должна была оказаться ближе Java, чем «враждебный» .NET: она ведь изначально про запуск на любых платформах («write once, run anywhere»), а не только на майкрософтовских. Но интересно, что в этом её «преимуществе» и оказалась подстава. Java была доступна на Linux бесплатно, но не была свободной и для GNU-формата не подходила. Теоретически можно было создать свободную реализацию — но это было не сделать скромными силами Ximian, это должен был быть большой опенсорсный проект с участием сообщества. А сообществу было непонятно, зачем тратить силы на «освобождение Java», когда имеющаяся несвободная и так бесплатно работала. Вот с .NET история другая: его на Linux не было вообще, «если мы не сделаем — значит, никакого не будет».
И в 2001-м де Икаса представил на конференции O'Reilly новый проект Mono, призванный сделать .NET кроссплатформенным и тем самым дать новые возможности разработчикам Linux-софта. То есть Мигель снова пошёл по излюбленному пути: увидел крутую штуку на одной платформе и понёс на другую.
Поддержка со стороны сообщества оказалась достаточной для развития проекта, но была совсем не единодушной. Ситуация, когда на Linux имплементируют технологию от Microsoft, закономерно вызывала опасения: в том же 2001-м говорили о стратегии Microsoft «Embrace, extend and extinguish» («поддержать, расширить и уничтожить»). Что, если компания до поры позволяет Mono существовать, но когда линуксовая экосистема окажется плотно завязана на C#, патентными судами выбьет почву у всех из-под ног?
И когда в 2009-м де Икаса принял участие в опенсорсной инициативе Microsoft CodePlex Foundation, Ричард Столлман — человек, текст которого в начале 90-х изменил весь курс жизни де Икасы — назвал его «предателем сообщества свободного ПО». Мигель ответил сдержанно: «Я думаю, есть целый мир разных возможностей, и если Ричард хочет обсудить, как мы можем улучшить опенсорсный/свободный софт, он знает мою почту».
Как бы то ни было, Mono развивался, и его стала использовать маленькая игровая компания (всего из нескольких человек), которая тогда называлась Over the Edge Entertainment. В 2005-м она выпустила движок Unity — на тот момент тоже малоизвестный. А в 2007-м спросила: «тут Apple выпустила телефон, сможете запустить Mono на нём?» И в итоге благодаря айфону всего лишь за год выросла на порядок. Похоже, успеху C# в геймдеве мы в значительной степени обязаны де Икасе.
Отдельная трогательная деталь: ещё будучи маленькой, компания искала инвестиции, и тогда де Икаса захотел вложиться в неё, но юристы усмотрели в этом конфликт интересов. Теперь, когда в Unity Technologies работают тысячи людей, он кусает локти.
Зато из бурного успеха Unity на iPhone он извлёк идею для своего следующего шага...
Xamarin
Раз «эта айфонная затея» явно взлетала, и там есть спрос на C# для игр, почему бы и обычные мобильные приложения не писать на C#? Изначально у Mono появились мобильные направления MonoTouch и Mono for Android, а позже история внезапно получила развитие по внешним причинам.
Ещё в 2003-м Ximian была куплена другой компанией Novell, но тогда это принципиально не поменяло ситуацию, де Икаса и Фридман продолжили работать в том же направлении. А вот в 2011-м сама Novell была поглощена компанией The Attachmate Group, новые владельцы решили не развивать часть направлений и устроили сокращения. В том числе эта судьба постигла команду Mono и самого де Икасу.
Конечно, безработица ему не грозила, такого специалиста наверняка хотели бы заполучить многие, но он не стал изучать вакансии. Вместе с тем же самым Нэтом Фридманом, с которым он 12 годами ранее основал Ximian, де Икаса создал новую компанию Xamarin — и туда перешла большая часть его прежней команды из Novell. Первым делом Xamarin выкупила у Attachmate разработки, которыми та же команда раньше и занималась: «вы ведь всё равно не собираетесь их развивать».
У Mono мобильные начинания были лишь «пристройками» к появившемуся до них, а новая компания продолжала развитие Mono, но ставила мобильную разработку во главу угла. В анонсе главным в её деятельности оказывалось «new commercial .NET offering for iOS/Android». А в интервью тех лет Мигель сказал, что в Novell ограничивали мобильное развитие Mono, так что увольнение в чём-то оказалось даже к лучшему, можно стало развернуться как следует.
Название Ximian отсылало к латинскому «simian» («обезьяна»), Mono — к испанскому «обезьяна», а Xamarin — к обезьяньему роду тамаринов.
Вероятно, вы в курсе, чем это кончилось. Компания Microsoft со временем становилась всё больше за кроссплатформенность и открытый исходный код, так что ей всё ближе оказывались идеи де Икасы, которые он пропагандировал ещё с 90-х. В 2014-м она анонсировала .NET Core, идущий в эту сторону. А в 2016-м дошло до того, что она просто купила Xamarin со словами «теперь дадим всем его возможности бесплатно». И, например, IDE Xamarin Studio позже была перебрендирована в Visual Studio for Mac.
Так Мигель де Икаса и Нэт Фридман, долго работавшие с технологиями Microsoft снаружи компании, в итоге оказались внутри неё. И Фридман сейчас возглавляет другую крупную покупку Microsoft — GitHub. А что теперь де Икаса? Проект Mono появился в 2001-м как «сторонняя кроссплатформенная реализация .NET, которую Microsoft никогда не сделает» — а как он вписывается в мир .NET спустя 19 лет, когда Microsoft сам уже кроссплатформеннее некуда?
В целом вписывается так: если раньше Mono был отдельным проектом, то сейчас его наработки влились в свежий .NET 5. Например, там соседствуют две виртуальные машины, подходящие для разных случаев: CoreCLR и MonoVM.
Конечно, когда соединяются такие крупные штуки, возникает много разных вопросов. Ну вот мы завтра в эфире DotNext как раз и будем задавать Мигелю вопросы: и о прошлом, и о настоящем. Узнаем больше подробностей о его прежних проектах — и разберёмся, как именно выглядит его нынешняя деятельность в Microsoft. А кроме наших вопросов, он ответит и на зрительские — так что если после этого текста захотелось узнать о чём-то подробнее, сможете получить ответ из первых рук.