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