Mono Project

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:41, 15 декабря 2017.
Mono
Mono project.png
Разработчики: Xamarin, ранее Novell
Выпущена: 30 June 2004 года; 13 years ago (2004-06-30)
Постоянный выпуск: 5.0.1 / 23 May 2017 года; 12 months ago (2017-05-23)[1]
Написана на: C, C#, XML
Операционная система: Windows, macOS, Linux
Платформа: x86-64, x86, ARM, MIPS, PowerPC, SPARC, S390, IA-64
Тип ПО: Платформенное ПО
Лицензия: GPL, LGPL, MIT
Веб-сайт http://www.mono-project.com/

Mono project - это программная платформа, которая позволяет разработчикам легко создавать кросс-платформенные приложения .NET Foundation. Спонсируется Microsoft и представляет собой реализацию .NET Framework на основе открытого исходного кода, основывается на страндартах ECMA для C # и Common Language Runtime. [Источник 1]

Основной разработчик проекта Mono — корпорация Xamarin, ранее Novell. Проект возглавляет Мигель де Икаса, известный разработчик, основатель проекта GNOME. Реализации Mono существуют для следующих операционных систем: Windows, Linux, BSD (FreeBSD, OpenBSD, NetBSD), Solaris, Mac OS X, Apple iOS, Wii. Поддерживаются платформы: s390, SPARC, PowerPC, x86/x86-64, IA-64, ARM, Alpha, MIPS, HP PA. [Источник 2]

Было много споров, связанных с открытым исходным кодом Mono, поскольку он реализует части .NET Framework, которые могут быть охвачены патентами Microsoft. Хотя стандартизированные части .NET Framework охватываются Microsoft «Open Specification Promise» - соглашение, в котором говорится, что Microsoft не будет отстаивать свои патенты против реализации спецификаций при определенных условиях - в отличие от других частей, что привело к опасениям, что проект Mono может стать объектом судебных исков о нарушении патентных прав. Microsoft приобрела Xamarin в начале 2016 года и для проекта Mono было выпущено обновленное патентное обещание.

История

Хронология выпуска Mono[2]
Дата Версия[3] Примечания
2004-06-30 1.0[4] C# 1.0 поддержка
2004-09-21 1.1[5]
2006-11-09 1.2[6] C# 2.0 поддерживается
2008-10-06 2.0[7] API-интерфейсы Mono теперь соответствуют стандарту .NET 2.0. Представляет компиляторы C# 3.0 и Visual Basic 8. Новые моно-специфичные API: Mono.Cecil, Mono.Cairo и Mono.Posix. Был выпущен Gtk# 2.12. Инструмент проверки Gendarme и Mono Linker были представлены.
2009-01-13 2.2[8] Mono переключили с движок JITна новое внутреннее представление, [9] что повышает производительность и вводит SIMD поддержку в Mono.Simd[10] Mono.Simd namespace.
Mono представила Full Ahead of Time компиляцию, коротая позволит разработчикам создавать законченные статические приложения и дебютировать в C# Compiler в качестве сервиса[11] и C# Interactive Shell[12] (C# REPL)
2009-03-30 2.4[13] Эта версия улучшит все функции, которые были представлены в версии 2.2 и станет основой, служащей для долгосрочной поддержки Mono в SUSE Linux.
2009-12-15 2.6[14] Теперь во время выполнения Mono стало возможным использовать LLVM в качестве основы для генерации кода и в этом выпуске представлены совместные подпрограммы Mono, Mono Soft Debugger и система безопасности CoreCLR, необходимые для Moonlight и других веб-плагинов.
В библиотеке классов впервые появились System.IO.Packaging, WCF клиент, WCF сервер, LINQ для SQL. Интерактивная полка поддерживает автоматическую компиляцию, LINQ для SQL поддерживает несколько баз данных. Вводится система построения xbuild.
2010-09-22 2.8[15] По умолчанию для профиля .NET 4.0, C# 4.0 поддержка, сборщик мусора нового поколения, включает Parallel Extensions, WCF Routing, CodeContracts, ASP.NET 4.0, снижает поддержку профиля 1.0; двигатель LLVM настроен на поддержку 99,9% всего сгенерированного кода, время исполнения выбирается llvm и gc; включает в себя Dynamic Language Runtime, Managed Extensibility Framework, ASP.NET MVC2, приложение OData Client с открытым исходным кодом от Microsoft;. Будет осуществлён выпуск версии 3.0.
2011-02-15 2.10[16]
2012-10-18 3.0[17] C# 5.0 поддерживается, осуществляется асинхронная поддержка, обновление базовой библиотеки классов Async и MVC4 - частичная, поддержка асинхронных функций отсутствует.
2013-07-24 3.2[18] Default Garbage Collector теперь является частью SGEN, а не Boehm.
2014-03-31 3.4[19]
2014-08-12 3.6[20]
2014-09-04 3.8[21]
2014-10-04 3.10[22]
2015-01-13 3.12[23]
2015-04-29 4.0[24] По умолчанию используется профиль .NET 4.5 и поставляются сборки только для .NET 4.5, по умолчанию используется C# 6.0. Первый выпуск с открытым исходным кодом для интеграции в Microsoft .NET.
2017-05-10 5.0[25] Shipping Roslyn C# компилятор для поддержки C#7 ; Shipping msbuild и deprecating xbuild для лучшей совместимости; Параллельное включение сборщика мусораSGen для уменьшения времени, проведённого в GC; Представление стека AppleTLS на macOS для соединений HTTPS; Продолжение развития конвергенции в .NET Class Library (библиотеке классов); Обновлен libjpeg в пакете macOS.
2017-07-14 5.2[26] Поддержка .NET Standard 2.0, введены устойчивые имена сборок и экспериментальные элементы интерфейса по умолчанию.
2017-10-05 5.4[27]

Когда Microsoft впервые объявила о своей платформе .NET Framework в июне 2000 года, она была описана как «новая платформа, основанная на стандартах Интернета» [30], а в декабре того же года базовая инфраструктура Common Language была опубликована как открытый стандарт: «ECMA-335», открывая потенциал для независимых реализаций. Мигель де Иказа из Ximian полагал, что .NET имеет потенциал для повышения производительности программистов и начал исследовать, возможна ли создать версию для Linux. Признавая, что их небольшая команда не может рассчитывать на создание и поддержку полного продукта, 19 июля 2001 года на конференции O'Reilly они начали проект с открытым исходным кодом Mono. [Источник 3]

После трех лет работы, 30 июня 2004 года был выпущен Mono 1.0. Моно развился из платформы для настольных приложений Linux в приложение, способное осуществлять поддержку широкого спектра архитектур и операционных систем, включая встроенные системы.

Novell приобрела Ximian в 2003 году. После того, как Novell была приобретена Attachmate в апреле 2011 года, Attachmate объявила о сотнях увольнений работников Novell, ставя под сомнение будущее Mono.

16 мая Мигель де Иказа объявил в своем блоге, что Моно по-прежнему будет поддерживаться компанией Xamarin, созданной им после увольнения из Novell. Оригинальная команда Mono также переехала в новую компанию. Xamarin планировал продолжить работу над Mono и переписать коммерческие стеки .NET для iOS и Android с нуля, потому что Novell по-прежнему принадлежали MonoTouch и Mono для Android в то время. После этого анонса, будущее проекта было поставлено под сомнение, MonoTouch и Mono для Android находятся в прямой конкуренции с существующими коммерческими предложениями, которыми сейчас владеет Attachmate, и учитывая, что команде Xamarin будет сложно доказать, что они не использовали технологии, которые они ранее разрабатывали в Novell. Однако в июле 2011 года Novell, теперь дочерняя компания Attachmate и Xamarin, объявила о предоставлении ей неограниченной лицензии на Xamarin для Mono, MonoTouch и Mono для Android, которая официально взяла на себя управление проектом.

Текущее состояние и функциональность

Текущая версия Mono 5.0.0 (по состоянию на май 2017 года). Эта версия осуществляет API .NET Framework и поддержку версий Visual Basic.NET и C # 2.0, 3.0 и 4.0. LINQ to Objects, XML и SQL являются частью дистрибутива. C # 6.0 теперь является режимом работы по умолчанию для компилятора C #. Windows Forms 2.0 также поддерживается, но не активно развивается, и поэтому его поддержка в Mono является неполной. Версия 4.0 - это первая версия, которая включает в себя исходный код Microsoft, который был выпущен Microsoft как часть проекта .NET Core.

Цель Mono - обеспечить полную поддержку функций в .NET 4.5, за исключением Windows Presentation Foundation (WPF) (которую команда Mono не планирует поддерживать из-за объема работы, которую необходимо будет сделать), Windows Workflow Foundation (WF), ограниченный Windows Communication Foundation (WCF). Некоторые недостающие части .NET Framework разрабатываются в экспериментальном подпроекте Mono под названием Olive.

Проект Mono также создал компилятор Visual Basic .NET и среду выполнения, предназначенную для запуска приложений VB.NET. В настоящее время она разрабатывается Рольфом Бьярне Квинге.

Moonlight

Внедрение Microsoft Silverlight с открытым исходным кодом, называемое Moonlight, было включено после Mono 1.9. Moonlight 1.0, поддерживающий API Silverlight 1.0, был выпущен 20 января 2009 года. Moonlight 2.0 поддерживает Silverlight 2.0 и некоторые особенности Silverlight 3.0. Предварительный выпуск Moonlight 3.0 был анонсирован в феврале 2010 года и содержит обновления для поддержки Silverlight 3.

Проект Moonlight был оставлен 29 мая 2012 года. По словам Мигеля, два фактора предрешили судьбу проекта: Microsoft добавила «искусственные ограничения», которые «... сделали бесполезным для программирования на рабочем столе ...», и технология не получила достаточного сцепления с Интернетом.

Компоненты Mono

Моно состоит из трех групп компонентов:

  1. Основные компоненты
  2. Моно / Linux / GNOME стек разработки
  3. Стек совместимости с Microsoft

К основным компонентам относятся компилятор C #, виртуальная машина для Common Language Infrastructure и библиотеки основных классов. Эти компоненты основаны на стандартах Ecma-334 и Ecma-335, что позволяет Mono предоставлять стандартную совместимую бесплатную виртуальную машину CLI с открытым исходным кодом. Microsoft выпустила документ, который охватывает оба стандарта в соответствии с их лицензией Community Promise.

Стек разработки Mono / Linux / GNOME обеспечивает пользователей инструментами для разработки приложений при использовании существующих в GNOME и бесплатных библиотек с открытым исходным кодом. К ним относятся: Gtk # для разработки графического интерфейса пользователя (GUI), библиотеки Mozilla для работы с механизмом рендеринга Gecko, библиотеки интеграции Unix (Mono.Posix), библиотеки подключений к базам данных, стек безопасности и язык XML-схемы RelaxNG. Gtk # позволяет приложениям Mono интегрироваться в рабочий стол Gnome в качестве родных приложений. Библиотеки баз данных обеспечивают возможность подключения к объектно-реляционной базе данных Db4o, Firebird, Microsoft SQL Server (MSSQL), MySQL, [[Open Database Connectivity (ODBC)], Oracle, PostgreSQL, SQLite и многим другим. Проект Mono отслеживает разработку компонентов базы данных на своем веб-сайте.

Стек совместимости с Microsoft обеспечивает путь для переноса приложений Windows .NET на GNU / Linux. К этой группе относятся, в частности, ADO.NET, ASP.NET и Windows Forms. Поскольку эти компоненты не охватываются стандартами Ecma, некоторые из них по-прежнему подвержены патентным опасениям.

Архитектура Framework

Основные компоненты Mono включают:

  • Механизм выполнения кода;
  • Библиотеки классов;
  • Библиотека базового класса;
  • Библиотеки классов совместимости .NET;
  • Моно специфические библиотеки классов:
  • Кросс-платформенные библиотеки классов для Mono и .NET (Gtk #, Mono.Cecil, Mono.CSharp, Text.Templating);
  • Unix-специфичные библиотеки классов (POSIX, файловая система в пространстве пользователя (FUSE));
  • Библиотеки классов, специфичные для платформы (привязки для: Mac, iOS, Android, MeeGo);
  • Сборка CLI;
  • Метаданные CLI;
  • Обычный язык выполнения Mono;
  • Совместимость с ECMA Common Language Infrastructure / .NET Common Language Runtime;
  • Моноспецифические улучшения:
  • Поддержка Mono.SIMD
  • Mono совместные подпрограммы и продолжения;
  • Моноспецифические улучшения;
  • Интерактивные сервисы и COM-взаимодействием;
  • Безопасность - прозрачная структура кода.

Механизм выполнения кода

Время выполнения содержит механизм выполнения кода, который преобразует коды байтов ECMA CIL в собственный код и поддерживает несколько процессоров: ARM, MIPS (только в 32-разрядном режиме), SPARC, PowerPC, S390 (в режиме 64 бит), x86 , x86-64 и IA-64 для 64-битных режимов.

Рис.1. Архитектура Mono

Генератор кода отображается в трех режимах:

  • Компиляция «точно в срок» (JIT): время выполнения превратит байты ECMA CIL в собственный код при запуске кода.
  • Компиляция Ahead (Ahead): этот код включает коды байтов ECMA CIL (обычно они находятся в файле .exe или .dll) и генерирует собственный код, хранящийся в операционной системе, архитектуре и конкретном файле CPU (для foo. exe, он будет производить foo.exe.so в Linux). Этот режим работы компилирует большую часть кода, который обычно выполняется во время выполнения. Существуют некоторые исключения, такие как батуты и другой административный код, которые все еще требуют, чтобы JIT функционировал, поэтому изображения AOT не полностью автономны.
  • Полная статическая компиляция: этот режим поддерживается только на нескольких платформах и выполняет процесс компиляции Ahead-of-Time на один шаг дальше и генерирует все батуты, функции обертки и прокси, которые требуются для статического файла, который может быть статически связан и полностью исключает необходимость использования JIT во время выполнения. Это используется на iOS от Apple, в PlayStation 3 от Sony и операционных системах Microsoft Xbox 360.

Начиная с Mono 2.6, стало возможным настроить Mono на использование LLVM в качестве механизма генерации кода вместо собственного механизма генерации кода Mono. Это полезно для высокопроизводительных вычислительных нагрузок и других ситуаций, когда производительность исполнения важнее производительности запуска.

Начиная с предварительного просмотра Mono 2.7, больше нет необходимости выбирать один двигатель над другим во время настройки. Механизм генерации кода может быть выбрана при запуске с использованием аргументов командной строки --llvm или --nollvm, и по умолчанию используется быстрый механизм генерации кода Mono.

Сборщик мусора

Начиная с Mono 2.8, Mono время выполнения осуществляется двумя сборщиками мусора: generational collector (коллектором поколений) и Boehm conservative collector (консервативным коллектором Бемом).

По умолчанию garbage-collected (сборщик мусора), который был до Mono 3.1.1 (сборщик мусорных контейнеров Boehm-Demers-Weiser) имеет значительные ограничения по сравнению с коммерческими сборками, такими как среда Java Virtual Machine или среда разработки .NET. Поскольку GC может обнаруживать утечки памяти в определенных классах приложений, он может быть непригоден для долгосрочных серверных приложений.

По состоянию на октябрь 2010 года новый коллектор поколений, называемый Simple Generational GC (SGen-GC), стал доступен как часть Mono. Начиная с Mono 3.1.1 это значение по умолчанию. Для версий Mono от 2.8 до 3.1.0 пользователи могут выбрать использование сборщика мусора SGen, передав при запуске ключ -gc = sgen во время выполнения Mono. Этот новый сборщик мусора имеет много преимуществ перед традиционным консервативным сканером. Он использует коллекцию мусора для генерации, в которой новые объекты выделяются из детской, во время цикла сбора мусора все оставшиеся объекты переносятся в пул памяти старшего поколения. Идея состоит в том, что многие объекты являются временными и могут быть быстро собраны, и только несколько объектов - долгосрочные объекты, которые живут на протяжении всей жизни приложения. Чтобы повысить производительность, этот коллекционер назначает пулы памяти для каждого потока, чтобы потоки выделяли новые блоки памяти без необходимости координировать их с другими потоками. Миграция объектов из детского сада в старое поколение осуществляется путем копирования данных из детской в ​​пул старого поколения и обновления любых указателей в реальном времени, указывающих на данные, характеризующие новое местоположение. Это может быть дорогостоящим для больших объектов, поэтому SGen Mono использует отдельный пул памяти для больших объектов (Large Object Section) и использует алгоритм mark-and-sweep для этих объектов.

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

Библиотека классов

Библиотека классов предоставляет полный набор возможностей для разработки приложений. Она в основном написана на C #, но из-за Common Language Specification могут использоваться любым языком .NET. Библиотека классов структурирована из пространства имен и развертывается в разделяемых библиотеках, известных как сборки. Говоря о платформе .NET, в первую очередь речь идет об этой библиотеке классов.

Пространства имен и сборки

Пространства имен - это механизм логической группировки подобных классов в иерархическую структуру. Это исключает конфликты имен. Структура реализована с использованием слов, разделенных точками, где наиболее распространенным пространством имен верхнего уровня является System, например System.IO и System.Net. Существуют и другие пространства имен верхнего уровня, такие как Accessibility и Windows. Пользователь может определить пространство имен, поместив элементы внутри блока пространства имен.

Сборка - физическая упаковка библиотек классов. Это DLL-файлы, как (но не путать с) разделяемые библиотеки Win32. Примерами узлов являются mscorlib.dll, System.dll, System.Data.dll и Accessibility.dll. Пространства имен часто распределяются между несколькими сборками, и одна сборка может состоять из нескольких файлов.

Общая языковая инфраструктура и общая языковая спецификация

Инфраструктура Common Language (CLI), или более известная как Common Language Runtime, реализуется исполняемым файлом Mono. Время выполнения используется для выполнения скомпилированных приложений .NET. Инфраструктура общего языка определяется стандартом ECMA. Чтобы запустить приложение, вы должны вызывать среду выполнения с соответствующими параметрами.

Спецификация общего языка (CLS) описана в главе 6 ECMA-335 и определяет интерфейс для CLI, например соглашения, подобные базовым типам для Enum. Компилятор Mono генерирует изображение, соответствующее CLS. Это общий промежуточный язык. Время выполнения Mono берет это изображение и запускает его. Стандарт ECMA формально определяет библиотеку, которая соответствует CLS в качестве основы.

Управляемый и неуправляемый код

В некоторых областях Mono имеет нововвведения с новыми расширениями основных спецификаций C # и CLI:

  • Компилятор C # как служба (компилятор C # используется в качестве библиотеки).
  • Интерактивная оболочка C #.
  • Поддержка SIMD как часть пространства имен Mono.SIMD, где вызовы методов для специальных векторных типов напрямую сопоставляются с инструкциями процессора *SIMD основного процессора.
  • Полная статическая компиляция .NET-кода (используется в Mono / iPhone, Mono / PS3).
  • Сопрограммы Mono (используется для реализации кода и продолжения многопоточности, в основном для разработчиков игр).
  • Сборка для выполняющихся процессов.
  • Использование LLVM в качестве JIT-сервера.
  • Cxxi и CppSharp напрямую взаимодействуют с кодом и библиотеками C ++.

Кроме того, Mono доступен в различных операционных системах и архитектурах.

Системные требования

Windows XP, Windows Vista, Windows 7, Windows 8, Windows 8.1,Windows 10, MacOSX or Linux.

Связанные проекты

Несколько проектов расширяют Mono и позволяют разработчикам использовать его в своей среде разработки. Эти проекты включают:

Кросс-платформенные:

  • Banshee Media Player (остановлен), кросс-платформенный музыкальный медиаплеер, построенный с помощью Mono и Gtk #, а также драйвер из десятков библиотек и проектов для обработки мультимедиа на C #.
  • Beagle (не поддерживается), поисковая система для Unix-систем.
  • Gecko #, привязки для встраивания механизма компоновки, используемого в Mozilla (Gecko).
  • Gtk #, C # обложки вокруг базовых библиотек GTK + и GNOME, написанные на C и доступные в Linux, MacOS и Windows.
  • Mono Migration Analyzer (MoMA) - инструмент, который помогает разработчикам Windows .NET находить области в своем коде, которые могут быть не межплатформенными и, следовательно, не работать в Mono на Linux и других Unix.
  • MonoCross, кросс-платформенный шаблон проектирования модели-представления, где модель и контроллер совместно используются на разных платформах, а представления уникальны для каждой платформы для оптимизированного пользовательского интерфейса. Требования рамок - Xamarin.iOS и Xamarin.Android.
  • MvvmCross, кросс-платформенная модель View ViewModel с использованием Xamarin.iOS и Xamarin.Android для разработки мобильных приложений.
  • MonoDevelop с открытым исходным кодом и кросс-платформенной интегрированной средой разработки, которая поддерживает создание приложений для ASP.NET, Gtk #, *Meego, MonoTouch и Silverlight / Moonlight.
  • Moonlight (прекращено), реализация Silverlight, которая использует Mono.
  • OpenTK, управляемая привязка для OpenGL, OpenCL и OpenAL.
  • QtSharp, C # для структуры Qt.
  • Resco MobileBusiness, кросс-платформенное решение для разработчиков мобильных клиентов.
  • Resco MobileCRM, кросс-платформенное решение для разработчиков мобильных клиентов, синхронизированное с Microsoft Dynamics CRM.
  • ServiceStack - высокопроизводительная инфраструктура веб-сервисов .NET REST с открытым исходным кодом, которая упрощает разработку веб-сервисов XML, JSON и SOAP.
  • SparkleShare - клиентское программное обеспечение с открытым исходным кодом, которое предоставляет службы хранения облачных данных и синхронизации файлов.
  • Tao (замененный OpenTK) - коллекция графических и игровых привязок (OpenGL, SDL, GLUT, Cg).
  • Xwt, набор инструментов GUI, который отображает вызовы API для вызовов на платформе базовой платформы, выставляя один унифицированный API на разных платформах и позволяя графическим пользовательским интерфейсам иметь собственный внешний вид на разных платформах. Это позволяет создавать графические пользовательские приложения на основе графического интерфейса, которые работают на нескольких платформах, без необходимости настраивать код для разных платформ. API Xwt сопоставляется с набором встроенных элементов управления на каждой поддерживаемой платформе. Функции, которые недоступны на определенных платформах, эмулируются с помощью собственных виджетов, которые называются хостингом в контексте Xwt. Xwt частично использовался как инструментарий GUI (помимо GTK #) в разработке Xamarin Studio. Поддерживаемые «backend» -модули: движок WPF и движок Gtk (с использованием Gtk #) на Windows, движок Cocoa (с использованием MonoMac) и движок Gtk (с использованием Gtk #) в Mac OS X и движок Gtk (с использованием Gtk #) в Linux.

macOS:

  • Cocoa # - обертки вокруг встроенного инструментария macOS (Cocoa) (устарело).
  • Monobjc - набор привязок для программирования macOS.
  • MonoMac - новые привязки для программирования macOS, основанные на дизайне API MonoTouch.

Мобильные платформы:

  • MonoDroid. Моно для операционной системы Android. С привязками для API Android.
  • MonoTouch. Моно для iPhone, iPad и iPod Touches. С привязками к API iOS.

Windows:

  • MonoTools для Visual Studio. Плагин Visual Studio, который позволяет разработчикам Windows ориентироваться на Linux и macOS прямо из Visual Studio и интегрируется с SUSE Studio.

Другие реализации

Microsoft имеет версию .NET 2.0, доступную только для Windows XP, называемую CLI общего ресурса (ротор). Лицензия на совместную исходную лицензию Microsoft может быть недостаточной для нужд сообщества (она запрещает коммерческое использование).

Portable.NET от компании Free Software Foundation был выведен из эксплуатации.

MonoDevelop

MonoDevelop - это бесплатная интегрированная среда разработки GNOME, разработанная специально для C # и других языков .NET, таких как Nemerle, Boo и Java (через IKVM.NET), хотя она также поддерживает языки, такие как C, C ++, Python и Vala. Первоначально MonoDevelop был портом SharpDevelop для Gtk #, но с тех пор он был разработан для удовлетворения потребностей разработчиков Mono. IDE включает в себя управление классами, встроенную справку, завершение кода, Stetic (дизайнер GUI), поддержку проекта и интегрированный отладчик.

Браузер MonoDoc обеспечивает доступ к документации API и образцам кода. В браузере документации используется управление контентом в стиле wiki, что позволяет разработчикам редактировать и улучшать документацию.

Xamarin.iOS and Xamarin.Android

Xamarin.iOS и Xamarin.Android, разработанные Xamarin, являются реализациями Mono для iPhone и смартфонов на базе Android. Ранее доступный только для коммерческого лицензирования, после приобретения Microsoft Xamarin в 2016 году, сама среда исполнения Mono была переведена в соответствии с лицензией MIT, и Xamarin.iOS и Xamarin.Android стали бесплатными и открытыми.

Xamarin.iOS

Xamarin.iOS (ранее называемая MonoTouch) - это собственная библиотека, которая позволяет разработчикам создавать приложения на базе C # и .NET, которые работают на устройствах iPhone, iPod и iPad. Он основан на структуре Mono и разработан совместно с Novell. В отличие от приложений Mono, Xamarin.iOS «Приложения» скомпилированы до машинного кода, специально предназначенного для Apple iPhone и iPad. Это необходимо, потому что ядро iOS предотвращает выполнение компилятором «точно в срок» на устройстве.

Стек Xamarin.iOS состоит из:

  • Составители:
  • C # из проекта Mono;
  • Сторонние компиляторы, такие как Oxygene от RemObject, могут ориентироваться на Xamarin.iOS также

основные библиотеки .NET;

  • Разработка SDK:
  • Linker - используется для связывания кода, используемого в окончательном приложении;
  • mtouch - собственный компилятор и инструмент, используемый для развертывания на целевом устройстве;
  • Инструменты интеграции интерфейса Builder;
  • Библиотеки, которые связывают родные API CocoaTouch;
  • Xamarin Studio IDE.

Xamarin Studio используется в качестве основной IDE, однако были добавлены дополнительные ссылки на Xcode и iOS-симулятор.

С апреля по начало сентября 2010 года будущее MonoTouch было поставлено под сомнение, поскольку Apple представила новые условия для разработчиков iPhone, которые, по-видимому, запрещают им развиваться на языках, отличных от C, C ++ и Objective-C, и использование среднего уровня между iOS и приложениями для iPhone. Из-за этого будущее MonoTouch и других технологий, таких как Unity, было неопределенным. Затем, в сентябре 2010 года, Apple отменила это ограничение, заявив, что они ослабляют языковые ограничения, которые они установили в начале этого года.

Xamarin.Android

Xamarin.Android (ранее известный как Mono для Android), первоначально разработанный Novell и продолжаемый Xamarin, является частной версией Mono для смартфонов на базе Android. Он был впервые выпущен 6 апреля 2011 года. Mono для Android был разработан, чтобы позволить разработчикам легко писать кросс-платформенные приложения, которые будут работать на всех мобильных платформах. В интервью H-Online Мигель де Иказа заявил: «Наше видение заключается в том, чтобы позволить разработчикам повторно использовать свой код движка и бизнес-логики на всех мобильных платформах и заменять код пользовательского интерфейса для API-интерфейса, специфичного для платформы».

В августе 2010 года представитель Microsoft, Том Ханрахан из Центра технологий с открытым исходным кодом Microsoft, заявил, ссылаясь на иск, поданный Oracle против Google по поводу использования Android в Java, «Тип действия, которое Oracle использует против Google через Java, не пройдет, если бы .NET-порт для Android проходил через Mono, он попал бы под соглашение об обещании сообщества Microsoft ».

Стек Xamarin.Android состоит из следующих компонентов:

  • Время выполнения Mono;
  • Разработчик пользовательского интерфейса Android;
  • Библиотеки:
  • Основные библиотеки классов .NET;
  • Библиотеки, которые привязывают собственные API для Android / Java;
  • Инструменты SDK для упаковки, развертывания и отладки;
  • Xamarin Studio и Visual Studio 2010 для разработки пользовательского интерфейса, удаленной отладки и развертывания.

Лицензии

Mono имеет двойную лицензию от Xamarin, аналогичную другим продуктам, таким как Qt и пакет приложений Mozilla. Компилятор Mono's C # и инструменты выпускаются в соответствии с GNU General Public License (только для GPLv2) (начиная с версии 2.0 Mono, исходный код компилятора Mono C # также будет доступен под лицензией MIT X11), библиотеки времени выполнения под GNU Lesser General Public License (только LGPLv2) и библиотеки классов под лицензией MIT. Это все бесплатное программное обеспечение и лицензии с открытым исходным кодом, и, следовательно, Mono - это бесплатное программное обеспечение с открытым исходным кодом. Лицензия компилятора C # была изменена с GPL на лицензию MIT X11, чтобы позволить повторить использование кода компилятора в нескольких случаях, когда GPL предотвратил бы такие случаи, как:

  • Компилятор Mono как услуга;
  • Интерактивная оболочка Mono;
  • Моно-встраиваемый компилятор C #;
  • Реализация Mono-динамического связующего C # 4.0;
  • Встроенный парсер MonoDevelop и график AST;

18 марта 2016 года приобретение Microsoft Xamarin было официально закрыто. 31 марта 2016 года Microsoft объявила в Microsoft Build, что они полностью переуступят Mono в рамках лицензии MIT даже в тех сценариях, где ранее требовалась коммерческая лицензия, и Microsoft заявила, что они не будут утверждать никаких «применимых патентов «против сторон, которые« используют, продают, предлагают для продажи, импорта или распространения Mono». Было также объявлено, что Xamarin внесла Mono Project в .NET Foundation.

Патенты Mono и Microsoft

Выполнение Mono компонентов, не представленных в ECMA для стандартизации, стало источником проблем, связанных с нарушением патентных прав на протяжении большей части существования проекта. В частности, состоялось обсуждение вопроса о том, может ли Microsoft уничтожить проект Mono с помощью патентных заявок. Это обсуждение стало спорным после того, как Microsoft приобрела Xamarin - основных разработчиков Mono. В июне 2009 года Техническая комиссия Ubuntu заявила, что не видит причин исключать Mono или приложения на основе него из архива или из установочного набора по умолчанию.

Базовые технологии, представленные ECMA и, следовательно, также части, относящиеся к Unix / GNOME, считаются безопасными благодаря тому, что Microsoft размещает стандарты ECMA 334 (C #) и ECMA 335 (CLI) в рамках обещания сообщества Microsoft. В первую очередь это касается технологий, разработанных Microsoft поверх .NET Framework, таких как ASP.NET, ADO.NET и Windows Forms, то есть части, составляющие стек совместимости Windows Mono. Эти технологии сегодня не полностью реализованы в Mono и не требуются для разработки Mono-приложений, они просто существуют для разработчиков и пользователей, которым требуется полная совместимость с системой Windows.

Если патентные вопросы когда-либо возникнут, стратегия проекта Mono для решения этих проблем выглядит следующим образом:

  • Работайте над патентом, используя другую технику реализации, которая сохраняет API, но меняет механизм;
  • Удалите фрагменты кода, которые были охвачены этими патентами;
  • Найдите известный уровень техники, который сделает патент бесполезным.

Кроме того, Mono также входит в список программного обеспечения, которое Open Invention Network обязуется защищать.

6 июля 2009 года Microsoft объявила о том, что она поместила свои спецификации ECMA 334 и ECMA 335 в соответствии с Community Promise о том, что они не будут отстаивать свои патенты против тех, кто внедряет, распространяет или использует альтернативные реализации .NET. Тем не менее, их позиция относительно компонентов, не относящихся к ECMA, таких как ASP.NET, ADO.NET и Windows Forms остается неясной.

Ричард Столлман из Free Software Foundation заявил 25 июня 2009, что «[...] мы должны не дать людям писать программы на C #. Поэтому мы не должны включать реализации C # в стандартную установку дистрибутивов GNU / Linux или в их основные способы установки GNOME ». 16 июля 2009 Бретт Смит заявил, что «патенты Microsoft намного опаснее: это единственная крупная компания-разработчик программного обеспечения, которая объявила себя врагом GNU / Linux и заявила о своем намерении атаковать наше сообщество посредством патентов." , "C # представляет собой уникальную угрозу для нас" и "The Community Promise не делает ничего , чтобы изменить ситуацию".

Руководитель проекта Fedora Пол Фриелдс заявил: «У нас есть серьезные опасения по поводу Mono, и мы продолжим рассматривать его с нашим юрисконсультом, чтобы узнать, нужны ли с нашей стороны какие-либо шаги», но «Мы не пришли к юридическому заключению, которое достаточно для того, чтобы мы решили принять Mono».

В ноябре 2011 года на саммите разработчиков Ubuntu разработчики проголосовали за удаление медиа-проигрывателя Banshee на основе Mono из установки по умолчанию Ubuntu, начиная с Ubuntu 12.04; хотя сообщаемые рассуждения включали проблемы производительности в архитектуре ARM, блокирующие проблемы в ее версии GTK + 3, и, по их мнению, «не поддерживаемая». На решение также повлияло желание удалить Mono из базы распределение, так как остальные программы, зависящие от Mono, gbrainy и Tomboy, также должны были быть удалены. Mono-разработчик Джозеф Майкл Шилдс защищал работу Banshee на ARM, а также утверждения о том, что Banshee не поддерживался в качестве «целенаправленное личное оскорбление» одному из его основных участников.

Рис.2. Banshee медиа-плеер
Рис.3.F-Spot

31 марта 2016 года Microsoft анонсировала в Microsoft Build, что они полностью переиздают лицензию Mono по лицензии MIT. Microsoft выпустила патентную обещание для Mono, в которой говорится, что они не будут утверждать какие-либо «применимые патенты» против сторон, которые «используют, продают, предлагают для продажи, импорта или распространения Mono». Было также объявлено, что Xamarin внес проект Mono в .NET Foundation.

По состоянию на 2017 год значительная часть собственного кода Microsoft для платформы .NET была выпущена под лицензиями FOSS, включая платформу .NET Compiler Platform («Roslyn»), ASP.NET, .NET Core и .NET Micro Framework.

Рис.4. Gbrainy

Программное обеспечение, разработанное с помощью Mono

Многие программы, охватывающие целый ряд приложений, были разработаны с использованием интерфейса программирования приложений Mono (API) и C #. Некоторые программы, написанные для Linux Desktop, включают Banshee, Beagle, Docky, F-Spot, Gbrainy, GNOME Do, MonoTorrent, Pinta и Tomboy.


Ряд видеоигр, таких как The Sims 3 и Second Life для своих языков сценариев, сервер виртуального мира OpenSimulator или игры, созданные с помощью движков Unity или MonoGame, также используют Mono.

Источники

  1. Mono Project // Mono. URL:http://www.mono-project.com/ (дата обращения: 20.10.2017).
  2. Mono // Википедия. [2017—2017]. Дата обновления: 15.08.2017. URL: http://ru.wikipedia.org/?oldid=87083241 (дата обращения: 20.10.2017).
  3. Mono // Википедия. [2017—2017]. Дата обновления: 15.08.2017. URL: https://en.wikipedia.org/wiki/Mono_(software)#Managed_and_unmanaged_code (дата обращения: 20.10.2017).

См. также

  1. Olive
  2. Обычное время выполнения программы
  3. .NET Framework
  4. Стандартные библиотеки
  5. Список рамок и библиотек .NET
  6. .NET Core
  7. MonoDevelop
  8. Moonlight
    1. "Mono Releases". Retrieved 23 July 2017. 
    2. "Mono Releases - Mono". Mono-project.com. Retrieved 2017-10-25. 
    3. "OldReleases - Mono". Mono-project.com. Retrieved 2017-10-25. 
    4. "Mono 1.0 Release Notes". Go-mono.com. Retrieved 2017-10-25. 
    5. "Mono 1.1.1: Development Release: Features and Known Issues". Go-mono.com. Retrieved 2017-10-25. 
    6. "Mono 1.2: Release Notes". Go-mono.com. Retrieved 2017-10-25. 
    7. "Release Notes Mono 2.0 - Mono". Mono-project.com. 2008-10-06. Retrieved 2017-10-25. 
    8. "Release Notes Mono 2.2 - Mono". Mono-project.com. Retrieved 2017-10-25. 
    9. "Linear IR - Mono". Mono-project.com. Retrieved 2017-10-25. 
    10. "Mono's SIMD Support: Making Mono safe for Gaming - Miguel de Icaza". Tirania.org. 2008-11-03. Retrieved 2017-10-25. 
    11. "Mono's C# Compiler as a Service on Windows. - Miguel de Icaza". Tirania.org. 2010-04-27. Retrieved 2017-10-25. 
    12. "CsharpRepl - Mono". Mono-project.com. Retrieved 2017-10-25. 
    13. "Release Notes Mono 2.4 - Mono". Mono-project.com. Retrieved 2017-10-25. 
    14. "Release Notes Mono 2.6 - Mono". Mono-project.com. Retrieved 2017-10-25. 
    15. "Release Notes Mono 2.8 - Mono". Mono-project.com. Retrieved 2017-10-25. 
    16. "Release Notes Mono 2.10 - Mono". Mono-project.com. Retrieved 2017-10-25. 
    17. "Release Notes Mono 3.0". Mono-project.com. Retrieved 2017-10-25. 
    18. "Release Notes Mono 3.2". Mono-project.com. Retrieved 2017-10-25. 
    19. "Release Notes Mono 3.4". Mono-project.com. Retrieved 2017-10-25. 
    20. "Release Notes Mono 3.6". Mono-project.com. Retrieved 2017-10-25. 
    21. "Release Notes Mono 3.8". Mono-project.com. Retrieved 2017-10-25. 
    22. "Release Notes Mono 3.10". Mono-project.com. Retrieved 2017-10-25. 
    23. "Release Notes Mono 3.12". Mono-project.com. Retrieved 2017-10-25. 
    24. "Release Notes Mono 4.0". Mono-project.com. Retrieved 2017-10-25. 
    25. "Release Notes Mono 5.0". Mono-project.com. Retrieved 2017-10-25. 
    26. http://www.mono-project.com/docs/about-mono/releases/5.2.0/.  Missing or empty |title= (help)
    27. http://www.mono-project.com/docs/about-mono/releases/5.4.0/.  Missing or empty |title= (help)