Microsoft стала гораздо дружелюбнее относится к открытому коду. Это выражается не только в том, что компания инициирует все больше собственных открытых проектов. Она разрабатывает важнейшие компоненты своей веб- и облачной платформы как открытые и поддерживает ряд внешних проектов с открытым кодом. Всё это замечательно, но путь к нынешнему состоянию дел занял много времени и потребовал значительных усилий.
В 2000-х отношение Microsoft к открытому коду потеплело, поскольку компания выросла и больше узнала об открытом коде и о том, какую пользу он может принести всем нам.
Мне подумалось, что было бы полезно поделиться примерами, которые иллюстрируют серьезный настрой Microsoft (и её экосистемы) на поддержку внешних проектов с открытым кодом и превращение команд разработчиков и проектов в открытые. Вот десять наиболее важных примеров.
10. Поддержка экосистемы открытого кода
Сообщество Windows .NET стремительно расширяется благодаря проектам и инициативам с открытым кодом, начиная с IoC/DI-контейнеров, таких как Ninject, AutoFac, Castle Windsor и StructureMap и заканчивая инструментами тестирования вроде nUnit. От NOSQL-хранилищ документов (таких, как совершенно фантастический RavenDB) до мощных систем управления контентом (CMS), например Orchard и Umbraco. И не забывайте про IronPython, IronRuby и F#, которые вырастила Microsoft и передала сообществу в 2010-м.
Этого всего лишь небольшое подмножество проектов с открытым кодом, созданных (или поддерживаемых) на платформе .NET/Windows.
9. Microsoft все реже изобретает велосипеды
Одной из самых больших претензий к Microsoft было то, что она создавала свои версии технологий, уже существующих в мире открытого кода. Приятным сюрпризом со стороны корпорации стало представление ASP.NET MVC 3.0 с jQuery и Modernizr. Это был большой шаг вперед (в результате громадных внутренних усилий) и один из первых случаев, когда Microsoft выпустила важный продукт, содержащий открытый код. В ASP.NET 4.0 Microsoft продолжает адаптировать проекты с открытым кодом, включая jQuery Mobile и JSON.NET.
8. Менеджер пакетов NuGet
Практически в любой живой экосистеме с открытым кодом наблюдается быстрый рост количества библиотек, доступных с помощью менеджеров пакетов, таких как (Ruby) Gems, (node) npm и так далее. Менеджеры пакетов позволяют разработчикам просто напечатать, скажем, “npm install express” — и библиотека будет установлена в проект или систему.
В наборе инструментов Windows/.NET-разработчиков не хватало пакета управления пакетами, пока группа энтузиастов из Microsoft не создала менеджер пакетов NuGet. Этот менеджер вместе с сайтом, содержащим галерею пакетов, в октябре 2010 г. был принят под крыло Outercurve Foundation и в настоящее время поддерживаются сообществом и командой NuGet. В настоящее время в галерее NuGet более 6000 пакетов, включая jQuery, Modernizr, JSON.NET, ELMAH, log4net, Ninject и подавляющее большинство библиотек, используемых .NET-разработчиками.
Хотя многие сообщества с открытым кодом могут насмехаться над тем, что доступно всего 6000 пакетов, важно отметить, что проект быстро растет, доля действительно полезных пакетов преобладает, а доля повторяющихся и пустяковых очень мала. Будем надеяться, что так и будет и впредь.
7. Windows становится отличной платформой для открытого кода
Многие популярные ныне проекты с открытым кодом изначально были созданы на Linux-платформах и поэтому зависят от систем ввода-вывода, хранилищ, систем управления потоками и процессами в стиле UNIX. Обычно такие проекты работают под управлением Windows в среде CygWin, позволяющей запускать в этой ОС большинство приложений, соответствующих стандарту POSIX. Это прагматический подход для кода, нетребовательного к производительности. Но в случае с высокопроизводительным кодом CygWin часто приводит к существенным потерям в производительности.
В такую ситуацию попал и node — популярный асинхронный движок JavaScript: в Windows он работал только на базе CygWin, что значительно снижало производительность. Для решения этой проблемы Microsoft и Joyent (первый спонсор node) договорились о совместном портировании node в Windows. В результате родилась библиотека LibUV, позволяющая node (и другим проектам с открытым кодом) пользоваться преимуществами асинхронного ввода-вывода в *N*X и Windows при условии, что пользователь приложит для этого некоторые усилия.
В ноябре 2011-го Microsoft объявила о первой стабильной сборке node с примененинием новой библиотеки LibUV. Одновременно в Microsoft создали IISNode, с помощью которого IIS (веб-сервер Microsoft) можно использовать для хостинга node. Код IISNode размещен на GitHub и открыт для всех для просмотра или модификации. И это не конец истории: библиотека LibUV оказалась настолько полезной, что другие проекты с открытым кодом используют ее для портирования в “родной” код Windows.
6. Microsoft создает ветки и поддерживает портирование
Знаком зрелости в отношениях с сообществом является то, что Microsoft начала создавать и поддерживать ветки. В ноябре 2011-го Antirez объявила о том, что Microsoft предоставила исправления для портирования (с использованием LibUV) Redis на Windows. Хотя Redis отказалась вносить исправления Microsoft в своё ядро (причины ею были опубликованы), она призвала корпорацию создать собственную ветку Redis для Windows. В нынешнем году создана дочерняя компания Microsoft Open Technologies во главе с Джином Паоли, первым проектом которой стала ветка Redis для Windows.
5. Поддержка Apache, PHP и Ruby на Windows
В 2008-м Microsoft стала сотрудничать с Apache и PHP в плане поддержки новейшего и более эффективного компилятора Visual C++ 2008 VC9. В результате появились “родные” сборки веб-сервера Apache и движка PHP, которые потребляют меньше памяти и значительно производительнее.
В том же году наряду с новым и улучшенным PHP корпорация начала поддерживать FastCGI в IIS. Это дает возможность использовать IIS для надежного хостинга в рамках одного веб-сайта (если требуется) не-потокобезопасного кода, такого как PHP и Ruby, наряду с .NET-кодом и “родными” модулями IIS. Теперь IIS можно использовать для надежного хостинга веб-сайтов и сервисов на базе PHP, включая Wordpress, Drupal, Joomla и другие.
4. Поддержка платформ с открытым кодом в Azure
На конференции Mix09 корпорация Microsoft объявила об официальной поддержке PHP, Java и Ruby на Windows Azure.
Так как экземпляры Windows Azure Web Role фактически являются виртуальными машинами Windows Server, не должно быть сюрпризом то, что Microsoft уже поддерживает FastCGI на IIS.
Microsoft дала понять, что не только поддерживает PHP, Ruby и Java на Azure, но для каждой среды разрабатывает полные API, предоставляя разработчикам доступ из предпочитаемого языка/платформы ко всем возможностям конфигурации и контроля сервисов Azure, таблицам, хранилищам BLOB'ов и очередей, интеграционной шине и так далее.
В декабре 2011-го, после портирования node на Windows, Microsoft объявила о полной поддержке node в облачной платформе Windows Azure, предоставив наряду с node Azure SDK программный доступ к среде, системе хранения и интеграционной шине Azure.
3. Поддержка Hadoop
В конце 2011-го Microsoft и HortonWorks объявили о совместной работе над портированием Hadoop в Windows. Это важное событие, поскольку Microsoft решила вложиться в портирование Hadoop на Windows и отказалась от создания собственных решений для работы с большими данными. Адаптация Hadoop может принести лишь хорошие результаты, особенно для рядовых пользователей, которые смогут анализировать колоссальные наборы данных с помощью привычных инструментов, таких как Excel и PowerView.
2. Microsoft входит в топ-20 компонентов ядра Linux
В прошлом году Microsoft вошла в топ-20 компонентов ядра Linux — той самой Linux, которую Стив Балмер свыше десяти лет тому назад назвал злокачественной опухолью. Да, времена меняются!
Вклад Microsoft в основном состоит в драйверах для Linux на Hyper-V (технология виртуализации). Её драйверы для ядра Linux обеспечивают значительное повышение производительности подсистем хранения, сетевых и видеоподсистем в виртуальных машинах Linux.
1. Открытие кода ASP.NET MVC 4.0, WebAPI и Razor View Engine
Возможно, самой яркой новостью со стороны Microsoft были следующие объявления:
- Будет опубликован исходный код ASP.NET MVC 4.0, Web API и Razor View Engine.
- Команда ASP.NET будет обсуждать и принимать изменения в ASP.NET от сообщества.
- Команда ASP.NET продолжит открытую разработку ASP.NET и будет публиковать изменения кода в публичном репозитарии GIT на сайте CodePlex фонда Outercurve Foundation.
Я думаю, очевидно, что Microsoft окончательно встала на путь признания и поддержки открытого кода. Это гигантский шаг вперед.
Microsoft показывает пример и посылает сигнал сообществу разработчиков: больше не надо бояться открытого кода, а его публикация приносит пользу всем. Будем надеяться, что это приведет к постепенному и в конечном счете значительному увеличению объема высококачественного, многократно используемого открытого кода, которым можно восхищаться, которому можно обучаться, который можно улучшать и принимать на вооружение.
Как сооснователь стартапа на базе технологий и платформ с открытым кодом, я могу лишь приветствовать инвестиции Microsoft в важные проекты с открытым кодом и их поддержку.
Время пришло! Добро пожаловать в мир открытого кода, Microsoft. И хорошо, что вы с нами!