Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот документ является высокоуровневой стратегией развития продуктов консоли Windows и терминала Windows. В нем рассматриваются следующие сведения:
Как консоль Windows и терминал Windows вписываются в экосистему приложений командной строки в Windows и других операционных системах.
История и будущий план продуктов, функций и стратегий, которые являются частью создания платформы, а также построения для этой платформы.
Основной целью текущей эпохи консоли или терминала в Корпорации Майкрософт является перенос интерфейса терминала первого класса непосредственно разработчикам на платформе Windows и поэтапного завершения классических API консоли Windows, заменяя их виртуальными последовательности терминалов с использованием псевдоконсоля. Терминал Windows демонстрирует этот переход в первый класс, приглашая совместную работу с открытым кодом от сообщества разработчиков, поддерживая полный спектр смешивания и сопоставления клиентских команд и приложений размещения терминалов, а также объединение экосистемы Windows со всеми другими платформами.
Определения
Прежде чем продолжить, рекомендуется ознакомиться с определениями общей терминологии, используемой в этом пространстве. Распространенная терминология включает в себя: приложения командной строки (или консоли),стандартные дескрипторы (STDIN
, STDOUT
STDERR
), устройства TTY и PTY, клиенты и серверы, консольная подсистема, узел консоли, псевдоконсол и терминал.
Архитектура
Общая архитектура системы состоит из четырех частей: клиента, устройства, сервера и терминала.
Клиент
Клиент — это приложение командной строки, использующее текстовый интерфейс, чтобы пользователь мог вводить команды (а не пользовательский интерфейс на основе мыши), возвращая текстовое представление результата. В Windows API консоли предоставляет уровень связи между клиентом и устройством. (Это также может быть стандартный дескриптор консоли с API-интерфейсами управления устройствами).
Устройство
Устройство — это промежуточный уровень обмена сообщениями между двумя процессами, клиентом и сервером. В Windows это драйвер консоли. На других платформах это устройство TTY или PTY. Другие устройства, такие как файлы, каналы и сокеты, могут использоваться в качестве этого канала связи, если вся транзакция находится в виде обычного текста или содержит последовательности виртуальных терминалов, но не с API консоли Windows.
Сервер
Сервер интерпретирует запрошенные вызовы API или сообщения от клиента. В Windows в классическом операционном режиме сервер также создает пользовательский интерфейс для представления выходных данных на экране. Сервер также собирает входные данные для отправки обратно в ответные сообщения клиенту через драйвер, например терминал, упакованный в том же модуле. Используя режим псевдоконсоля , вместо этого он является только переводчиком, чтобы представить эти сведения в последовательностях виртуальных терминалов в подключенном терминале.
Терминал
Терминал — это конечный слой, предоставляющий пользователям графические службы отображения и взаимодействия. Он отвечает за запись входных данных и кодирование его в виде последовательностей виртуальных терминалов, которые в конечном итоге достигают клиента STDIN
. Он также получит и декодирует последовательности виртуальных терминалов , которые он получает обратно от клиента STDOUT
для презентации на экране.
Дальнейшие подключения
В качестве надстройки дальнейшие подключения можно выполнять путем цепочки приложений, которые служат нескольким ролям в одну из конечных точек. Например, сеанс SSH имеет две роли: это терминал для приложения командной строки, работающего на одном устройстве, но он перенаправит все полученные сведения на роль клиента на другом устройстве. Эта цепочка может происходить на неопределенный срок между устройствами и контекстами, предоставляя широкие возможности сценария.
На платформах, отличных от Windows, роли сервера и терминала являются одной единицей, так как нет необходимости в уровне совместимости перевода между набором API и виртуальными последовательности терминалов.
Продукты Майкрософт
Все продукты командной строки Microsoft Windows теперь доступны на сайте GitHub в репозитории с открытым исходным кодом, microsoft/terminal.
Узел консоли Windows
Это традиционный пользовательский интерфейс Windows для приложений командной строки. Он обрабатывает все службы API консоли, вызываемые из любого подключенного приложения командной строки. Консоль Windows также обрабатывает представление графического пользовательского интерфейса (GUI) от имени всех этих приложений. Он находится в системном каталоге как conhost.exe
или openconsole.exe
в форме с открытым исходным кодом. Он поставляется с операционной системой Windows. Его также можно найти в других продуктах Майкрософт, созданных из репозитория с открытым исходным кодом, для более up-toреализации псевдоконсоля инфраструктуры. Согласно приведенным выше определениям, он работает в объединенной роли сервера и терминала традиционно или только для сервера через предпочтительную псевдоконсольную инфраструктуру.
Терминал Windows
Это новый интерфейс Windows для приложений командной строки. Терминал Windows служит первым примером использования псевдоконсоля для разделения проблем между обслуживанием API и взаимодействием с текстовым приложением, как и для всех платформ, отличных от Windows.
Терминал Windows — это флагманский пользовательский интерфейс в текстовом режиме для Windows. Он демонстрирует возможности экосистемы и ведет разработку Windows к объединению с другими платформами. Терминал Windows также является примером создания надежного и сложного современного приложения, охватывающего историю и гамму API и платформ Windows. Согласно приведенным выше определениям, этот продукт работает в роли терминала.
Основные исторические вехи
Основные исторические вехи для подсистемы консоли разбиваются на реализацию до 2014 года, а затем переходят в обзор работы, выполняемой с 2014 года, когда обновленный фокус на командной строке был сформирован в эпоху Windows 10.
Начальная реализация
[1989-1990s] Начальная система узла консоли была реализована в качестве эмуляции среды DOS в операционной системе Windows. Его код запутан и совместно с командной строкой, cmd.exe
то есть представлением этой среды DOS. Код системы узла консоли предоставляет общие обязанности и привилегии с интерпретатором командной строки или оболочкой. Кроме того, он предоставляет базовый уровень служб для других служебных программ командной строки для выполнения служб в подобном CMD способе.
DBCS для CJK
[1997-1999] В настоящее время поддержка DBCS ("набор символов двойного байта") представлена для поддержки рынков CJK (китайский, японский и корейский). Это приводит к бифюрации многих методов записи и чтения в консоли, чтобы предоставить обе "западные" версии для работы с однобайтными символами, а также альтернативное представление для "восточных" версий, где два байта требуются для представления огромного массива символов. Этот бифюркация включала расширение представления ячейки в консоли в 1 или 2 ячейки ширины, где 1 ячейка узкая (выше, чем она широка) и 2 ячейки имеют ширину, полную ширину или иначе квадрат, в котором можно вписать типичные китайские, японские и корейские иеографы.
Безопасность и изоляция
[2005-2009] При работе с подсистемой консоли, работающей внутри критического системного процесса, csrss.exe
подключение клиентских приложений с различными уровнями доступа к одному суперкритичному и привилегированным процессам было отмечено как особенно опасное. В этой эпохе подсистема консоли была разделена на клиентские, драйверы и серверные приложения. Каждое приложение может выполняться в собственном контексте, уменьшая обязанности и привилегии в каждом из них. Эта изоляция увеличила общую надежность системы, так как любой сбой в подсистеме консоли больше не повлиял на другие критически важные функции процесса.
Улучшения пользовательского интерфейса
[2014-2016] После длительного времени общего разбросанного обслуживания консоли подсистемы по всей организации, новая команда, ориентированная на разработчиков, была сформирована для владения и повышения производительности консоли. Улучшения за это время включали: выделение строк, изменение размера окна, изменение размера текста, копирование и вставка, поддержка высокого DPI и фокус на Юникоде, включая конвергенцию разделения между "западным" и "восточным" алгоритмами обработки и потоковой обработки.
Клиент виртуального терминала
[2015-2017] При поступлении подсистемы Windows для Linux корпорация Майкрософт предпринимает усилия по улучшению опыта Docker в Windows и внедрению OpenSSH в качестве технологии удаленного выполнения премьер-строки, начальные реализации последовательностей виртуальных терминалов были введены в узел консоли. Это позволило существующей консоли выступать в качестве терминала, подключенной непосредственно к этим приложениям linux в соответствующих средах, отрисовке графических и текстовых атрибутов в отображение и возврате входных данных пользователей в соответствующем диалекте.
Сервер виртуального терминала
[2018] За последние двадцать лет сторонние альтернативные варианты для узла консоли "Входящие" были созданы для обеспечения дополнительной производительности разработчика, выдающегося в центре богатых настроек и интерфейсов с вкладками. Эти приложения по-прежнему необходимы для запуска и скрытия окна узла консоли. Они присоединяются в качестве дополнительного "клиентского" приложения для извлечения сведений о буфере в циклах опроса в качестве основного клиентского приложения командной строки, работающего. Их цель заключалась в том, чтобы быть терминалом, как и на других платформах, но в мире Windows, где терминалы не были заменены.
В этот период времени была введена псевдоконсольная инфраструктура. Псевдоконсол позволяет любому приложению запускать узел консоли в неинтерактивном режиме и стать конечным интерфейсом терминала для пользователя. Основное ограничение в этой деятельности было продолжение обещания совместимости Windows в обслуживании всех опубликованных API консоли Windows в течение неопределенного будущего, обеспечивая интерфейс размещения сервера замены сервера, соответствующий ожидаемому на всех остальных платформах: последовательности виртуальных терминалов. Таким образом, это усилие выполнило зеркальное изображение этапа клиента: псевдоконсоли проектов, которые будут отображаться на экране как виртуальные последовательности терминалов для делегированного узла и интерпретируют ответы в входные последовательности windows-формата для потребления клиентских приложений.
Стратегия развития будущего
Приложения терминала
[2019-Now] Это эра с открытым исходным кодом для консоли, сосредоточенная на новом терминале Windows. Объявлено во время конференции Microsoft Build в мае 2019 г. Терминал Windows полностью находится на сайте GitHub в microsoft/terminal. Создание приложения терминала Windows на основе уточненной платформы для псевдоконсоля будет фокусом этой эпохи, в результате чего интерфейс терминала первого класса непосредственно для разработчиков на платформе Windows.
Терминал Windows намерен не только продемонстрировать платформу , включая технологию интерфейса WinUI , модель упаковки MSIX и архитектуру компонента C++/WinRT , но и как проверку самой платформы. Терминал Windows управляет организацией Windows, чтобы открыть и развивать платформу приложений по мере необходимости, чтобы продолжить повышение производительности разработчиков. Уникальный набор требований для пользователей и разработчиков терминала Windows позволяет управлять современными требованиями платформы Windows для того, что эти рынки действительно нуждаются в Windows.
В операционной системе Windows это включает выход из стандартного пользовательского интерфейса узла консоли в пользу терминала Windows, ConPTY и последовательностей виртуальных терминалов.
Наконец, эта эра намерена предложить полный выбор по умолчанию, будь то продукт терминала Windows или любые альтернативные терминалы.
Библиотека поддержки клиентов
[Будущее] Благодаря поддержке и документации по последовательности виртуальных терминалов на стороне клиента мы настоятельно рекомендуем разработчикам программы командной строки Windows использовать последовательности виртуальных терминалов сначала по классическим API Windows, чтобы получить преимущество единой экосистемы со всеми платформами. Однако один из важных отсутствующих элементов заключается в том, что другие платформы имеют широкий набор вспомогательных библиотек на стороне клиента для обработки входных данных, таких как строка чтения и графический дисплей, например ncurses. Этот конкретный будущий элемент карты дорожной карты представляет изучение того, что экосистема предлагает и как мы можем ускорить внедрение виртуальных последовательностей терминалов в приложениях командной строки Windows через классический API консоли.
Сквозное руководство по последовательности
[Будущее] Сочетание реализаций клиента и сервера виртуального терминала позволяет полностью смешивать и сопоставлять приложения командной строки клиента и терминала размещения. Это сочетание может говорить с классическими API консоли Windows или виртуальными последовательности терминалов, однако есть затраты на преобразование этого в классический совместимый метод Windows, а затем обратно в более универсальный метод виртуального терминала.
Когда рынок достаточно принимает последовательности виртуальных терминалов и UTF-8 в Windows, задание преобразования и интерпретации узла консоли может быть дополнительно отключено. Затем узел консоли станет простым поставщиком вызовов API и ретранслятором от вызовов устройств к размещению приложения через псевдоконсол. Это изменение увеличит производительность и максимизирует диалект последовательностей, которые можно говорить между клиентским приложением и терминалом. Благодаря этому изменению будут включены дополнительные сценарии интерактивности и (наконец) принести мир Windows в соответствие с семейством всех других платформ в пространстве приложений командной строки.