Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este documento é um roteiro de alto nível dos produtos Windows Console e Terminal Windows. Abrange:
Como o Console do Windows e o Terminal do Windows se encaixam no ecossistema de aplicativos de linha de comando no Windows e em outros sistemas operacionais.
Um histórico e roteiro futuro dos produtos, recursos e estratégias que fazem parte da construção da plataforma, bem como da construção para esta plataforma.
O foco da atual era de console/terminal na Microsoft é trazer uma experiência de terminal de primeira classe diretamente para os desenvolvedores na plataforma Windows e eliminar gradualmente as APIs clássicas do Console do Windows, substituindo-as por sequências de terminais virtuais utilizando pseudoconsole. O Terminal do Windows mostra essa transição para uma experiência de primeira classe, convidando a colaboração de código aberto da comunidade de desenvolvedores, oferecendo suporte a um espectro completo de mistura e correspondência de aplicativos de hospedagem de terminal e linha de comando do cliente e unificando o ecossistema do Windows com todas as outras plataformas.
Definições
Recomenda-se familiarizar-se com as definições de terminologia comum usadas neste espaço antes de prosseguir. A terminologia comum inclui: aplicativos de linha de comando (ou console), identificadorespadrão (STDIN, STDOUTSTDERR, ), dispositivos TTY e PTY, clientes e servidores, subsistema de console, host de console, pseudoconsole e terminal.
Arquitetura
A arquitetura geral do sistema é em quatro partes: cliente, dispositivo, servidor e terminal.
Cliente
O cliente é um aplicativo de linha de comando que usa uma interface baseada em texto para permitir que o usuário insira comandos (em vez de uma interface de usuário baseada em mouse), retornando uma representação de texto do resultado. No Windows, a API do Console fornece uma camada de comunicação entre o cliente e o dispositivo. (Isso também pode ser um identificador de console padrão com APIs de controle de dispositivo).
Dispositivo
O dispositivo é uma camada intermediária de comunicação de manipulação de mensagens entre dois processos, o cliente e o servidor. No Windows, este é o driver do console. Em outras plataformas, é o dispositivo TTY ou PTY. Outros dispositivos, como arquivos, pipes e soquetes, podem ser usados como esse canal de comunicação se toda a transação estiver em texto sem formatação ou contiver sequências de terminais virtuais, mas não com APIs do Console do Windows.
Servidor
O servidor interpreta as chamadas de API solicitadas ou mensagens do cliente. No Windows, no modo de operação clássico, o servidor também cria uma interface de usuário para apresentar a saída na tela. O servidor também coleta entrada para enviar mensagens de resposta para o cliente, através do driver, como um terminal empacotado no mesmo módulo. Usando o modo pseudoconsole , em vez disso, é apenas um tradutor para apresentar essas informações em sequências de terminal virtual para um terminal conectado.
Terminais
O terminal é a camada final que fornece serviços de exibição gráfica e interatividade para o usuário. Ele é responsável por capturar a entrada e codificá-la como sequênciasSTDIN terminais virtuais, que eventualmente chegam ao cliente . Ele também receberá e decodificará as sequências de terminais virtuais que receber de volta do cliente STDOUT para apresentação na tela.
Outras ligações
Como um adendo, outras conexões podem ser executadas encadeando aplicativos que servem várias funções em um dos pontos de extremidade. Por exemplo, uma sessão SSH tem duas funções: é um terminal para o aplicativo de linha de comando em execução em um dispositivo, mas encaminha todas as informações recebidas para uma função de cliente em outro dispositivo. Esse encadeamento pode ocorrer indefinidamente entre dispositivos e contextos, oferecendo ampla flexibilidade de cenário.
Em plataformas que não sejam Windows, as funções de servidor e terminal são uma única unidade porque não há necessidade de uma camada de compatibilidade de tradução entre um conjunto de API e sequências de terminais virtuais.
Produtos Microsoft
Todos os produtos de linha de comando do Microsoft Windows agora estão disponíveis no GitHub em um repositório de código aberto, microsoft/terminal.
Windows Console Host
Esta é a interface de usuário tradicional do Windows para aplicativos de linha de comando. Ele lida com todos os serviços de API do console chamados de qualquer aplicativo de linha de comando anexado. O Console do Windows também lida com a representação da interface gráfica do usuário (GUI) em nome de todos esses aplicativos. Ele é encontrado no diretório do sistema como conhost.exe, ou openconsole.exe em sua forma de código aberto. Ele vem com o sistema operacional Windows. Ele também pode ser encontrado em outros produtos da Microsoft criados a partir do repositório de código aberto para uma implementação mais up-toda infraestrutura do pseudoconsole . De acordo com as definições acima, ele opera em uma função combinada de servidor e terminal tradicionalmente ou em uma função somente de servidor por meio da infraestrutura de pseudoconsole preferida.
Windows Terminal
Esta é a nova interface do Windows para aplicativos de linha de comando. O Terminal do Windows serve como um exemplo primário de uso do pseudoconsole para separar as preocupações entre o serviço de API e a interface de aplicativos baseados em texto, muito parecido com todas as plataformas que não são Windows.
O Terminal do Windows é a principal interface de usuário de modo de texto para Windows. Ele demonstra os recursos do ecossistema e está impulsionando o desenvolvimento do Windows em direção à unificação com outras plataformas. O Terminal do Windows também é um exemplo de como criar um aplicativo moderno robusto e complexo que abrange a história e a gama de APIs e estruturas do Windows. De acordo com as definições acima, este produto opera em uma função terminal.
Principais marcos históricos
Os principais marcos históricos para o subsistema de console são quebrados em implementação antes de 2014 e, em seguida, passa para uma visão geral do trabalho realizado desde 2014, quando o foco renovado na linha de comando foi formado na era do Windows 10.
Implementação inicial
[1989-1990] O sistema host de console inicial foi implementado como uma emulação do ambiente DOS dentro do sistema operacional Windows. Seu código é entrelaçado e cooperativo com o Prompt de Comando, cmd.exeque é uma representação desse ambiente DOS. O código do sistema host do console compartilha responsabilidades e privilégios com o interpretador/shell do Prompt de Comando. Ele também fornece um nível básico de serviços para outros utilitários de linha de comando executarem serviços de maneira semelhante ao CMD.
DBCS para CJK
[1997-1999] Nessa época, o suporte a DBCS ("conjunto de caracteres de byte duplo") é introduzido para suportar os mercados CJK (chinês, japonês e coreano). Este esforço resulta em uma bifurcação de muitos dos métodos de escrita e leitura dentro do console para fornecer versões "ocidentais" para lidar com caracteres de byte único, bem como uma representação alternativa para versões "orientais", onde dois bytes são necessários para representar a vasta gama de caracteres. Esta bifurcação incluiu a representação em expansão de uma célula no ambiente de console para ter 1 ou 2 células de largura, onde 1 célula é estreita (mais alta do que larga) e 2 células é larga, de largura total, ou de outra forma um quadrado no qual ideógrafos típicos chineses, japoneses e coreanos podem ser inscritos.
Segurança/Isolamento
[2005-2009] Com a experiência do subsistema de console em execução dentro do processo crítico do sistema, csrss.execonectar aplicativos cliente variados, em diferentes níveis de acesso, a um único processo supercrítico e privilegiado foi notado como particularmente perigoso. Nessa época, o subsistema de console era dividido em aplicativos cliente, driver e servidor. Cada aplicativo pode ser executado em seu próprio contexto, reduzindo as responsabilidades e privilégios em cada um. Esse isolamento aumentou a robustez geral do sistema, pois qualquer falha no subsistema do console não afetava mais outras funcionalidades críticas do processo.
Melhorias na experiência do usuário
[2014-2016] Depois de um longo tempo de manutenção geralmente dispersa do subsistema de console por equipes variadas em toda a organização, uma nova equipe focada no desenvolvedor foi formada para possuir e impulsionar melhorias no console. As melhorias durante esse tempo incluíram: seleção de linha, redimensionamento suave de janelas, refluxo de texto, copiar e colar, alto suporte a DPI e foco em Unicode, incluindo a convergência da divisão entre algoritmos de manipulação de fluxo e armazenamento "ocidental" e "oriental".
Cliente de terminal virtual
[2015-2017] Com a chegada do Subsistema Windows para Linux, os esforços da Microsoft para melhorar a experiência do Docker no Windows e a adoção do OpenSSH como a principal tecnologia de execução remota de linha de comando, as implementações iniciais de sequências de terminais virtuais foram introduzidas no host do console. Isso permitiu que o console existente atuasse como o terminal, conectado diretamente a esses aplicativos nativos do Linux em seus respetivos ambientes, renderizando atributos gráficos e de texto para a exibição e retornando a entrada do usuário no dialeto apropriado.
Servidor de terminal virtual
[2018] Nos últimos vinte anos, alternativas de terceiros para o host do console da caixa de entrada foram criadas para oferecer produtividade adicional ao desenvolvedor, proeminentemente centrada em personalizações ricas e interfaces com guias. Esses aplicativos ainda precisavam executar e ocultar a janela do host do console. Eles se conectam como um aplicativo "cliente" secundário para extrair informações de buffer em loops de sondagem como o aplicativo cliente de linha de comando primário operado. Seu objetivo era ser um terminal, como em outras plataformas, mas no mundo Windows, onde os terminais não eram substituíveis.
Neste período de tempo, a infraestrutura de pseudoconsole foi introduzida. O Pseudoconsole permite que qualquer aplicativo inicie o host do console em um modo não interativo e se torne a interface final do terminal para o usuário. A principal limitação nesse esforço foi a promessa de compatibilidade contínua do Windows na manutenção de todas as APIs de Console do Windows publicadas para o futuro indefinido, enquanto fornecia uma interface de hospedagem de servidor de substituição que correspondia ao que é esperado em todas as outras plataformas: sequências de terminais virtuais. Como tal, esse esforço executou a imagem espelhada da fase do cliente: o pseudoconsole projeta o que seria exibido na tela como sequências de terminal virtual para um host delegado e interpreta as respostas em sequências de entrada no formato Windows para consumo do aplicativo cliente.
Roteiro para o futuro
Aplicações de terminais
[2019-Agora] Esta é a era de código aberto para o subsistema de console, com foco no novo Terminal Windows. Anunciado durante a conferência Microsoft Build em maio de 2019, o Windows Terminal está totalmente no GitHub na microsoft/terminal. Construir o aplicativo Terminal do Windows sobre a plataforma refinada para pseudoconsole será o foco desta era, trazendo uma experiência de terminal de primeira classe diretamente para os desenvolvedores na plataforma Windows.
O Windows Terminal pretende não apenas mostrar a plataforma — incluindo a tecnologia de interface WinUI , o modelo de empacotamento MSIX e a arquitetura de componentes C++/WinRT — mas também como uma validação da própria plataforma. O Terminal do Windows está levando a organização do Windows a abrir e evoluir a plataforma de aplicativos conforme necessário para continuar a aumentar a produtividade dos desenvolvedores. O conjunto exclusivo de requisitos de usuários avançados e desenvolvedores do Terminal Windows orienta os requisitos modernos da plataforma Windows para o que esses mercados realmente precisam do Windows.
Dentro do sistema operacional Windows, isso inclui desativar a interface de usuário clássica do host do console de sua posição padrão em favor do Terminal do Windows, ConPTY e sequências de terminal virtual.
Por fim, esta era pretende oferecer uma escolha completa sobre a experiência padrão, seja o produto Windows Terminal ou quaisquer terminais alternativos.
Biblioteca de suporte ao cliente
[Futuro] Com o suporte e a documentação de sequências de terminais virtuais no lado do cliente, recomendamos fortemente que os desenvolvedores de utilitários de linha de comando do Windows usem as sequências de terminal virtual primeiro sobre as APIs clássicas do Windows para obter o benefício de um ecossistema unificado com todas as plataformas. No entanto, uma parte significativa que falta é que outras plataformas têm uma ampla gama de bibliotecas auxiliares do lado do cliente para lidar com entradas como linha de leitura e exibição gráfica como ncurses. Este elemento específico do roteiro futuro representa a exploração do que o ecossistema oferece e como podemos acelerar a adoção de sequências de terminais virtuais em aplicativos de linha de comando do Windows em relação à API clássica do console.
Sequência de Passagem
[Futuro] A combinação de implementações de cliente de terminal virtual e servidor permite a mistura completa e correspondência de aplicativos de hospedagem de terminal e linha de comando do cliente. Essa combinação pode falar com as APIs clássicas do Console do Windows ou sequências de terminais virtuais, no entanto, há um custo geral para traduzir isso no método clássico compatível do Windows e, em seguida, de volta para o método de terminal virtual mais universal.
Uma vez que o mercado adote suficientemente sequências de terminais virtuais e UTF-8 no Windows, o trabalho de conversão/interpretação do host do console pode ser opcionalmente desativado. O host do console se tornaria um simples serviço de chamada de API e retransmitiria de chamadas de dispositivo para o aplicativo de hospedagem por meio do pseudoconsole. Essa alteração aumentará o desempenho e maximizará o dialeto das sequências que podem ser faladas entre o aplicativo cliente e o terminal. Através dessa mudança, cenários adicionais de interatividade seriam habilitados e (finalmente) alinhariam o mundo Windows com a família de todas as outras plataformas no espaço de aplicativos de linha de comando.