Mono
Mono — проект по созданию полноценного воплощения системы .NET Framework на базе свободного программного обеспечения. В основе проекта лежат спецификации на С# и CLI, переданные Microsoft в организации по стандартизации. Но Mono — это не просто клон .Net, здесь есть свои собственные технологии и библиотеки, которых нет в MS .NET. Цель Mono — помочь в переносе написанных для Windows .Net-программ под Linux и другие ОС.
Компилятор С# и инструментарий Mono предоставляются по лицензии GNU General Public License (GPL), библиотеки исполняющей среды — по лицензии GNU Lesser General Public License (LGPL), а библиотеки классов — по лицензии MIT.
Проект Mono разрабатывается довольно долгое время — с 2001 года, но до сих пор окончательно не ясен правовой статус этого программного продукта. В 2003 г. корпорация Microsoft получила патент США 20030028685, фактически охватывающий весь каркас .NET Framework. И с тех пор ситуация с патентами на С# и CLI остается неоднозначной. Эта причина сдерживает широкое и повсеместное использование платформы.
За реализацию С# и CLI отвечают стандарты ЕСМА-334, ЕСМА-335, наличие которых подразумевает свободу на использование описанного функционала и отсутствие всяческих ограничений (использование на не дискриминационных условиях, не требующих авторских выплат — royalty-free, reasonable, non-discriminatory terms).
Но вышеупомянутые «не дискриминационные условия» нигде не описаны, а неоднократные попытки выяснить этот вопрос (в ЕСМА, в Microsoft и у разработчиков Mono) были безуспешны (возможно, компания Microsoft сознательно затягивала предоставление необходимой информации). В июле 2009 года все же было опубликовано Community Promise (Обещание Сообществу), официально заявляющего отсутствие патентных или иных притязаний на стандартизированные таким образом разработки.
После этого события Mono был разделен на две ветки: одна, занимающаяся реализацией ECMA стандартов и попадающая под действие Community Promise; вторая, реализующая свободные версии ASP.NET, ADO.NET, Winforms и других технологий (которые не были стандартизированы ECMA/ISO). Тем не менее, многие считают, что Community Promise не дает полной гарантии от возможных патентных претензий. Разработчики Mono рекомендуют обходить нестандартизированные API, а на случай изменения лицензии .NET, параллельно разрабатывается API, являющийся полностью собственной разработкой Mono.
Как уже было упомянуто выше, .Net генерирует код, который, теоретически, может исполняться на различных операционных системах. Но на практике совместимость между платформами (Mono и .Net) не полная и использование их на различных операционных системах связана с рядом проблем.
Условно Mono можно разделить на три части — ядро, стек разработки для Mono/Linux и стек компонент Microsoft:
- К компонентам ядра относятся компилятор С# (mcs), виртуальная машина (mono) и библиотеки классов. Эти компоненты основаны на стандартах ЕСМА-334 и ЕСМА-335 и предоставляют соответствующую стандартам свободную версию платформы .Net.
- Стек разработки для Mono/Linux предоставляет инструменты для разработки приложений с использованием различных свободных библиотек. К ним относится: библиотеки для разработки графических интерфейсов пользователя (Gtk#), обертки к OpenGL (Tao Framework) и Mac OS X toolkit (Cocoa#), библиотеки Mozilla для работы с системой рендеринга Gecko (Gecko#), библиотеки Unix, библиотеки для работы с базами данных (Mono. Data), стек компонент безопасности и язык описания XML-схем RelaxNG
- Стек компонент Microsoft предоставляет средства переноса приложений для Windows .NET на Linux-платформу. К этим компонентам относятся ADO.NET, ASP.NET, Windows.Forms и другие.
.NET/Mono | |
---|---|
.NET Framework • Mono | |
Другие проекты | Wine • ReactOS • Microsoft |