Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este documento é um roteiro de alto nível dos produtos do Console do Windows e do Terminal do Windows. Ele 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 um roteiro futuro dos produtos, recursos e estratégias que fazem parte da criação da plataforma, bem como da criação dessa plataforma.
O foco da era atual do 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 terminal virtual utilizando pseudoconsole. O Terminal do Windows mostra essa transição para uma experiência de primeira classe, convidando a colaboração de software livre da comunidade de desenvolvedores, dando suporte a um espectro completo de combinação e correspondência de aplicativos de hospedagem de linha de comando e terminal do cliente e unificação do ecossistema do Windows com todas as outras plataformas.
Definições
É recomendável familiarizar-se com as definições de terminologia comum usadas nesse espaço antes de continuar. A terminologia comum inclui: aplicativos de Linha de Comando (ou Console),identificadores padrão (STDIN, STDOUT, STDERR), dispositivos TTY e PTY, clientes e servidores, subsistema de console, host do console, pseudoconsole e terminal.
Arquitetura
A arquitetura geral do sistema está 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 do 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ções de manipulação de mensagens entre dois processos, o cliente e o servidor. No Windows, esse é o driver do console. Em outras plataformas, é o dispositivo TTY ou PTY. Outros dispositivos como arquivos, pipes e soquetes poderão ser usados como esse canal de comunicação se a transação inteira estiver em texto sem formatação ou contiver sequências de terminal virtual, mas não com APIs do Console do Windows.
Servidor
O servidor interpreta as chamadas ou mensagens da API solicitadas do cliente. No Windows, no modo operacional clássico, o servidor também cria uma interface do usuário para apresentar a saída para a tela. Além disso, o servidor coleta entradas para enviar mensagens de resposta ao cliente, por meio do driver, como um terminal agrupado no mesmo módulo. Usando o modo pseudoconsole , ele é apenas um tradutor para apresentar essas informações em sequências de terminal virtual a um terminal anexado.
Terminal
O terminal é a camada final que fornece serviços gráficos de exibição e interatividade para o usuário. Ele é responsável por capturar a entrada e codificar-a como sequências de terminal virtual, que eventualmente atingem o cliente STDIN. Ele também receberá e decodificará as sequências de terminal virtual que recebe de volta do cliente STDOUT para apresentação na tela.
Conexões adicionais
Como um adendo, outras conexões podem ser executadas encadeando aplicativos que atendem a 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 que oferecem ampla flexibilidade de cenário.
Em plataformas não 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 terminal virtual.
Produtos da Microsoft
Todos os produtos de linha de comando do Microsoft Windows agora estão disponíveis no GitHub em um repositório de software livre, microsoft/terminal.
Windows Console Host
Essa é a interface do usuário tradicional do Windows para aplicativos de linha de comando. Ele manipula toda a manutenção da API do console chamada de qualquer aplicativo de linha de comando anexado. O Console do Windows também manipula a representação de GUI (interface gráfica do usuário) em nome de todos esses aplicativos. Ele é encontrado no diretório do sistema como conhost.exe, ou openconsole.exe em seu formulário de software livre. 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 software livre para uma implementação mais up-todata da infraestrutura pseudoconsole . De acordo com as definições acima, ele opera em uma função de servidor e terminal combinada tradicionalmente ou em uma função somente servidor por meio da infraestrutura pseudoconsole preferencial.
Windows Terminal
Esta é a nova interface do Windows para aplicativos de linha de comando. O Terminal do Windows serve como um exemplo de primeira parte do uso do pseudoconsole para separar as preocupações entre a manutenção da API e a interfiguração de aplicativos baseados em texto, assim como todas as plataformas que não são do Windows.
O Terminal do Windows é a interface do usuário do modo de texto principal do Windows. Ele demonstra os recursos do ecossistema e está impulsionando o desenvolvimento do Windows para unificar com outras plataformas. O Terminal do Windows também é um exemplo de como criar um aplicativo moderno robusto e complexo que abrange o histórico e a gama de APIs e estruturas do Windows. De acordo com as definições acima, esse produto opera em uma função de terminal.
Principais marcos históricos
Os principais marcos históricos do subsistema de console são divididos em implementação antes de 2014 e, em seguida, se movem para uma visão geral do trabalho executado desde 2014, quando o foco renovado na linha de comando foi formado na era do Windows 10.
Implementação inicial
[1989-1990s] O sistema de host de console inicial foi implementado como uma emulação do ambiente DOS dentro do sistema operacional Windows. Seu código é emaranhado e cooperativo com o Prompt de Comando, cmd.exeque é uma representação desse ambiente dos DOS. O código do sistema de host do console compartilha responsabilidades e privilégios com o interpretador/shell do Prompt de Comando. Ele também fornece um nível base de serviços para outros utilitários de linha de comando executarem serviços de maneira semelhante ao CMD.
DBCS para CJK
[1997-1999] Por volta desta época, o suporte a DBCS ("Conjunto de caracteres de bytes duplos") é introduzido para dar suporte aos mercados CJK (chinês, japonês e coreano). Esse 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", em que dois bytes são necessários para representar a vasta matriz de caracteres. Essa bifurcação incluiu a representação em expansão de uma célula no ambiente do console para ter 1 ou 2 células de largura, em que 1 célula é estreita (mais alta do que larga) e duas células são largas, de largura total ou de outra forma um quadrado no qual os 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 super crítico e privilegiado foi notado como particularmente perigoso. Nessa época, o subsistema de console foi 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 afeta mais outras funcionalidades críticas do processo.
Melhorias na experiência do usuário
[2014-2016] Após um longo tempo de manutenção geralmente dispersa do subsistema de console por equipes variadas em toda a organização, uma nova equipe focada em desenvolvedores foi formada para possuir e impulsionar melhorias no console. As melhorias durante esse tempo incluíram: seleção de linhas, redimensionamento de janela suave, refluxo de texto, cópia e colagem, alto suporte a DPI e um foco no Unicode, incluindo a convergência da divisão entre algoritmos de manipulação de fluxo e armazenamento "leste".
Cliente do Terminal Virtual
[2015-2017] Com a chegada do Subsistema do 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 terminal virtual foram introduzidas no host do console. Isso permitiu que o console existente atuasse como o terminal, anexado diretamente a esses aplicativos nativos do Linux em seus respectivos ambientes, renderizando atributos gráficos e de texto para a exibição e retornando a entrada do usuário no dialeto apropriado.
Servidor do Terminal Virtual
[2018] Nos últimos vinte anos, foram criadas alternativas de terceiros para o host do console de caixa de entrada para oferecer produtividade adicional do desenvolvedor, centradas em personalizações avançadas e interfaces com guias. Esses aplicativos ainda precisavam ser executados e ocultar a janela do host do console. Eles são anexados como um aplicativo "cliente" secundário para raspar informações de buffer em loops de sondagem à medida que o aplicativo cliente de linha de comando principal operava. Seu objetivo era ser um terminal, como em outras plataformas, mas no mundo windows onde os terminais não eram substituíveis.
Nesse período, a infraestrutura 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 no serviço de todas as APIs de Console do Windows publicadas para o futuro indefinido, ao mesmo tempo em que fornece uma interface de hospedagem de servidor de substituição que correspondia ao esperado em todas as outras plataformas: sequências de terminais virtuais. Dessa forma, esse esforço executou a imagem espelho 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 respostas em sequências de entrada no formato Windows para consumo de aplicativo cliente.
Roteiro para o futuro
Aplicativos de terminal
[2019-Now] Esta é a era de software livre para o subsistema do console, com foco no novo Terminal do Windows. Anunciado durante a conferência do Microsoft Build em maio de 2019, o Terminal do Windows está inteiramente no GitHub no microsoft/terminal. A criação do aplicativo do Terminal do Windows sobre a plataforma refinada para pseudoconsole será o foco desta época, trazendo uma experiência de terminal de primeira classe diretamente para desenvolvedores na plataforma Windows.
O Terminal do Windows pretende não apenas mostrar a plataforma , incluindo a tecnologia de interface WinUI, o modelo de empacotamento MSIX e a arquitetura de componente 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 aumentando a produtividade dos desenvolvedores. O conjunto exclusivo de requisitos de usuários e desenvolvedores do Terminal do Windows impulsiona os requisitos modernos da plataforma Windows para o que esses mercados realmente precisam do Windows.
Dentro do sistema operacional Windows, isso inclui a desativação da interface do usuário do host do console clássico de sua posição padrão em favor do Terminal do Windows, do ConPTY e das sequências de terminal virtual.
Por fim, essa era pretende oferecer uma opção completa sobre a experiência padrão, seja o produto do Terminal do Windows ou quaisquer terminais alternativos.
Biblioteca de suporte ao cliente
[Futuro] Com o suporte e a documentação de sequências de terminal virtual no lado do cliente, incentivamos fortemente os desenvolvedores do utilitário de linha de comando do Windows a usar sequências de terminal virtual primeiro nas APIs clássicas do Windows para obter o benefício de um ecossistema unificado com todas as plataformas. No entanto, uma parte significativa ausente é que outras plataformas têm uma ampla variedade de bibliotecas auxiliares do lado do cliente para lidar com entradas como leitura e exibição gráfica como ncurses. Esse elemento de roteiro futuro específico representa a exploração do que o ecossistema oferece e como podemos acelerar a adoção de sequências de terminal virtual em aplicativos de linha de comando do Windows pela API clássica do Console.
Passagem de sequência
[Futuro] A combinação de implementações de cliente e servidor de terminal virtual permite a combinação completa e a 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 terminal virtual, no entanto, há um custo de sobrecarga para traduzi-lo para o método clássico compatível com o Windows e, em seguida, voltar para o método de terminal virtual mais universal.
Depois que o mercado adotar suficientemente sequências de terminal virtual e UTF-8 no Windows, o trabalho de conversão/interpretação do host do console poderá ser desabilitado opcionalmente. O host do console se tornaria um serviço de chamada de API simples 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 de sequências que podem ser faladas entre o aplicativo cliente e o terminal. Por meio dessa alteração, cenários de interatividade adicionais seriam habilitados e (por fim) colocariam o mundo do Windows em alinhamento com a família de todas as outras plataformas no espaço do aplicativo de linha de comando.