Введение

Общая языковая инфраструктура (CLI) — это открытая спецификация и технический стандарт, первоначально разработанный Microsoft и стандартизированный ISO/IEC (ISO/IEC 23271) и Ecma International (ECMA 335), описывающий исполняемый код и среду выполнения, позволяющую использовать несколько языков программирования высокого уровня на различных компьютерных платформах без переписывания для конкретных архитектур. Это подразумевает платформенную независимость. .NET Framework, .NET и Mono являются реализациями CLI. Формат метаданных также используется для определения API, предоставляемых средой выполнения Windows.

Стандартизация и лицензирование

В августе 2000 года Microsoft, Hewlett Packard, Intel и другие компании работали над стандартизацией CLI. К декабрю 2001 года он был ратифицирован Ecma, а в апреле 2003 года последовала стандартизация ISO/IEC. Microsoft и ее партнеры владеют патентами на CLI. Ecma и ISO/IEC требуют, чтобы все патенты, необходимые для реализации, были доступны на "разумных и недискриминационных (RAND) условиях". Обычно лицензирование RAND предполагает уплату некоторых лицензионных отчислений, что может вызывать опасения в отношении Mono. По состоянию на январь 2013 года ни Microsoft, ни ее партнеры не выявили каких-либо патентов, необходимых для реализации CLI, подлежащих условиям RAND. С июля 2009 года Microsoft добавила C# и CLI в список спецификаций, к которым применяется Microsoft Community Promise, поэтому любой может безопасно реализовать указанные редакции стандартов, не опасаясь патентного иска со стороны Microsoft. Для реализации стандарта CLI требуется соответствие одному из поддерживаемых и определенных профилей стандарта, минимальным из которых является профиль ядра. Профиль ядра фактически представляет собой очень небольшой набор типов для поддержки по сравнению с хорошо известной базовой библиотекой стандартных установок .NET. Однако пункт о соответствии в спецификации CLI позволяет расширить поддерживаемый профиль путем добавления новых методов и типов к классам, а также создания производных классов из новых пространств имен. Но он не позволяет добавлять новых членов в интерфейсы. Это означает, что функциональность CLI может использоваться и расширяться, при условии, что реализация соответствующего профиля не изменяет поведение программы, предназначенной для запуска на этом профиле, и допускает неопределенное поведение программ, написанных специально для данной реализации. В 2012 году Ecma и ISO/IEC опубликовали новую редакцию стандарта CLI.

Реализация

.NET Framework — это оригинальная коммерческая реализация CLI от Microsoft. Она поддерживает только Windows. В ноябре 2020 года её сменила .NET. .NET, ранее известная как .NET Core, является бесплатной и открытой многоплатформенной заменой .NET Framework, распространяемой под лицензией MIT. .NET Compact Framework — коммерческая реализация CLI от Microsoft для портативных устройств и Xbox 360. .NET Micro Framework — реализация CLI с открытым исходным кодом для устройств с ограниченными ресурсами. Mono — альтернативная реализация CLI и сопутствующих технологий с открытым исходным кодом, в основном используемая для разработки мобильных и игровых приложений.