Автор статьи — Мэдс Торгерсен, ведущий архитектор C# в Microsoft

Проект Roslyn

Roslyn — это кодовое название, которое закрепилось за open-source компилятором для C# и Visual Basic.NET. Проект начинался в самой глубокой тьме последнего десятилетия корпоративной жизни Microsoft — и завершился как проект с открытым исходным кодом, кросс-платформенный, публичный универсальный движок для C# (и VB, что я приму как данность в остальной части статьи).

Первые разговоры о проекте, который впоследствии станет известен как Roslyn, уже шли, когда я пришёл на работу в Microsoft в 2005 году — незадолго до выпуска .NET 2.0. Шёл разговор о переписывании C# на C#. Это нормальная практика для языков программирования — доказательство зрелости языка. Но была и более практичная и важная мотивация: мы, создатели C#, сами не программировали на C#, мы программировали на C++! Если же ежедневно программировать на C#, то вы меняете своё мнение: великая сила работы на том инструменте, какой разрабатываете (dogfooding).

Пользователи зависят от поведения нового компилятора в точности как от старого. Написание нового компилятора для C# — это попытка найти соответствие баг-к-багу.

Трудность переписывания компилятора, который уже несколько лет находится в активном использовании, состоит в том, что пользователи зависят от поведения нового компилятора в точности как от старого. Написание нового компилятора для C# — это попытка найти соответствие баг-к-багу. И я говорю не только об известных багах, но также о неизвестных ошибках и нежелательных формах поведения, которые разработчики нашли и используют, часто неосознанно.

В течение многих лет масштабы этой проблемы не позволяли нам даже приступить к осуществлению проекта.

И хотя разработчики языковой группы в Microsoft получали много преимуществ от нового компилятора C#, написанного на C#, однако ценность для конечных пользователей была не так очевидна: чем новый компилятор будет им полезен? Возможно, единственные люди, которых волнует, что компилятор C# написан на C# — это сами разработчики компилятора.

В то же время всё больше проявляла себя ещё одна проблема: дублирование усилий между различными инструментами, работающими на коде C#. Кроме компилятора, другая команда работала над поддержкой IDE для C# в Visual Studio, и им тоже приходилось писать кучу кода (в то время тоже на C++), чтобы понять синтаксис и семантику C#.

Одновременно росло и количество инструментов от Microsoft и других компаний, таких как StyleCop, CodeRush и т.д.: все они должны реализовать осмысленную обработку кода C#. У каждой из этих программ свои чуть различные ошибки, разные уровни понимания, различные компромиссы и уступки. И все они потратили бы очень много усилий, чтобы прийти к единому пониманию кода.

И мы решились на важное предложение: сделать так, чтобы в мире была только одна кодовая база — единая база для всех инструментов, которые работают с кодом C#!

Ценность такого предложения вытекает из увеличения числа имеющихся инструментов, и особенно из повышения качества существующих инструментов. Все требования к правильности и производительности языка возлагаются на единую кодовую базу. Достаточно однократных усилий, чтобы сделать базу звёздного качества и огромной универсальности. Мы же создадим настоящий движок для языка! Унифицированный, открытый API для кода C#. Мы дадим новое определение понятию «компилятор».

Конечно, как только вы создаете API для широкого сообщества C#, то как бы само собой разумеется, что это должен быть .NET API, реализованный на C#. Итак, давняя мечта написания C# на C# осуществляется почти как случайный побочный эффект.

Таким образом, Roslyn родился из менталитета открытости: совместное использование внутренней работы C# для программного использования всем миром. Это само по себе было немного смелым предложением для ещё довольно закрытой корпоративной культуры Microsoft.

Мы будем делиться интеллектуальной собственностью бесплатно? М�� будем расширять возможности инструментов, которые конкурируют с нами?

В корпоративном обсуждении нам помогли выиграть аргументы об укреплении экосистемы и создании языка с лучшим инструментарием на планете. Речь шла о долгосрочном росте C# и .NET по сравнению с краткосрочной монетизацией и защитой активов Microsoft. Таким образом, даже не упоминая открытый исходный код, ставка на Roslyn стала большим и смелым шагом для Microsoft.

Конечно, разработка чего-то подобного не может оказаться простой. Перспективы Roslyn были очень амбициозными и чреватыми техническими проблемами, и нам потребовалось полдесятилетия, чтобы справиться со всем. Но это уже другая история.

В течение большей части первоначальной разработки Roslyn оставался проектом с закрытым исходным кодом.

С самого начала серьёзной работы над проектом в 2009 году у нас были идеи сделать компиляторы открытыми, но Microsoft просто ещё не была готова.

В Microsoft с 1970-х годов существовала культура закрытой разработки и защиты исходного кода патентами. И хотя изменения витали в воздухе, но происходили медленнее, чем надеялась наша команда.

На самом деле какое-то время казалось, что компания идёт в совершенно противоположном направлении.

Проект Windows 8 очень сильно повлиял на всю компанию. Благодаря новой модели программирования его щупальца проникли глубоко в команды разработчиков инструментов и языков, и всё было покрыто крайней секретностью, не только снаружи, но даже внутри компании. В качестве примера, функция async, которую мы разрабатывали в то время, была скоординирована и смешана с моделью программирования Windows 8, и я бы не осмелился публиковать заметки о её дизайне даже внутри компании, опасаясь случайной утечки информации о Windows 8 и проблем на свою голову! Это создавало ужасный климат для инноваций, и конечно, не позволяло нам надеяться на открытый исходный код компилятора C#.

Однако в итоге, когда Windows 8 пошла своей дорогой, компания начала трансформироваться и нашла новое направление, новое руководство и совсем иную философию — та Microsoft, которую мы знаем сегодня. Открытые исходники сейчас стремительно распространяются внутри Microsoft.

F# выпущен уже в 2010 году с открытой лицензией и собственной организацией — F# Software Foundation. Вокруг него сформировалось выдающееся сообщество, которое вскоре стало предметом зависти для всех нас. Наша команда упорно настаивала на том, чтобы получить свободную лицензию для Roslyn — и, наконец, корпоративная инфраструктура позволила осуществить это.

К 2012 году Microsoft создала организацию Microsoft Open Tech, специально ориентированную на проекты с открытым исходным кодом. Roslyn перешёл под её крыло и официально стал проектом open source. Roslyn вполне созрел для этого: все ресурсы разработки были внутренними и хорошо известными, и сам проект не страдал от большого количества зависимостей, которые могли бы породить лицензионные конфликты.

В апреле 2014 года на конференции разработчиков Build в Сан-Франциско Андерс Хейлсберг представил Roslyn как проект с открытым исходным кодом, а сами исходники опубликовали 3 апреля на CodePlex (бывшая платформа Microsoft для репозиториев) под лицензией Apache 2.0.



В то же время .NET Foundation объявили базой для .NET-проектов, включая Roslyn.

Это освобождение стало настоящим глотком свежего воздуха! Мы начали пожинать плоды открытости уже в CodePlex, а затем были устранены оставшиеся процедурные препятствия с открытым исходным кодом в Microsoft, так что сегодня open source является естественной и неотъемлемой частью того, как мы работаем во многих наших командах.

Мы уже не рассматриваем GitHub как место для публикации исходников — это просто место нашей работы.

На других фронтах компания тоже поняла, что необязательно стремиться всё контролировать. Стало ясно, что нет никаких веских причин для существования CodePlex — и Roslyn вместе с другими проектами мигрировал на GitHub, к тому времени де-факто основную площадку для проектов с открытым исходным кодом. Не только сам код, но и процесс его создания ведётся в GitHub: мы уже не рассматриваем GitHub как место для публикации исходников — это просто место нашей работы.



Дизайн языка C# и реализация компилятора — теперь полностью открытые процессы, со значительным участием сторонних разработчиков. Они создают в том числе целые языковые функции. Ценность C# просто зашкаливает не только за счёт масштабирования усилий при написании функций и исправлении ошибок, но и за счёт понимания и коррекции курса, которые мы производим благодаря мгно��енному ежедневному циклу обратной связи с сообществом.

Это было долгое и сумасшедшее путешествие, и для меня оно символизирует огромные изменения, которые претерпела Microsoft в последнее десятилетие. Самородок Roslyn родился в темноте, но вырос на идеях открытости — и сегодня взорвался миллионом различных применений благодаря силе open source.

Изучайте Roslyn и дизайн языка C#:

Roslyn на GitHub
C# на GitHub