Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este documento es una hoja de ruta de alto nivel de los productos de consola de Windows y Terminal Windows. Abarca:
Cómo encaja la consola de Windows y el terminal Windows en el ecosistema de aplicaciones de línea de comandos en Windows y otros sistemas operativos.
Un historial y una hoja de ruta futura de los productos, características y estrategias que forman parte de la creación de la plataforma, así como la creación de esta plataforma.
El enfoque de la era actual de la consola o terminal en Microsoft es incorporar una experiencia de terminal de primera clase directamente a los desarrolladores en la plataforma Windows y eliminar gradualmente las API clásicas de la consola de Windows, reemplazandolas por secuencias de terminal virtual mediante pseudoconsola. Terminal Windows muestra esta transición a una experiencia de primera clase, invitando a la colaboración de código abierto de la comunidad de desarrolladores, dando soporte a un espectro completo de mezcla y coincidencia de aplicaciones de hospedaje de terminal y línea de comandos de cliente, y unificando el ecosistema de Windows con todas las demás plataformas.
Definiciones
Se recomienda familiarizarse con las definiciones de terminología común que se usan en este espacio antes de continuar. La terminología común incluye: aplicaciones de línea de comandos (o consola),identificadores estándar (STDIN, STDOUT, STDERR) , dispositivos TTY y PTY, clientes y servidores, subsistema de consola, host de consola, pseudoconsola y terminal.
Arquitectura
La arquitectura general del sistema está en cuatro partes: cliente, dispositivo, servidor y terminal.
Cliente
El cliente es una aplicación de línea de comandos que usa una interfaz basada en texto para permitir al usuario escribir comandos (en lugar de una interfaz de usuario basada en el mouse), devolviendo una representación de texto del resultado. En Windows, la API de consola proporciona una capa de comunicaciones entre el cliente y el dispositivo. (Esto también puede ser un identificador de consola estándar con las API de control de dispositivos).
Dispositivo
El dispositivo es una capa intermedia de comunicaciones de control de mensajes entre dos procesos, el cliente y el servidor. En Windows, este es el controlador de consola. En otras plataformas, es el dispositivo TTY o PTY. Otros dispositivos como archivos, canalizaciones y sockets se pueden usar como este canal de comunicación si toda la transacción está en texto sin formato o contiene secuencias de terminal virtual, pero no con las API de consola de Windows.
Servidor
El servidor interpreta las llamadas api solicitadas o los mensajes del cliente. En Windows en el modo operativo clásico, el servidor también crea una interfaz de usuario para presentar la salida a la pantalla. Además, el servidor recopila la entrada para devolver mensajes de respuesta al cliente, a través del controlador, como un terminal agrupado en el mismo módulo. Con el modo pseudoconsola , en su lugar es solo un traductor para presentar esta información en secuencias de terminal virtual a un terminal conectado.
Terminal
El terminal es la capa final que proporciona servicios gráficos de visualización e interactividad al usuario. Es responsable de capturar la entrada y codificarla como secuencias de terminal virtual, que finalmente llegan al cliente STDIN. También recibirá y descodificará las secuencias de terminal virtual que recibe de vuelta de la presentación del STDOUT cliente en la pantalla.
Conexiones adicionales
Como anexo, se pueden realizar más conexiones mediante el encadenamiento de aplicaciones que atienden varios roles en uno de los puntos de conexión. Por ejemplo, una sesión ssh tiene dos roles: es un terminal para la aplicación de línea de comandos que se ejecuta en un dispositivo, pero reenvía toda la información recibida a un rol de cliente en otro dispositivo. Este encadenamiento puede producirse indefinidamente en dispositivos y contextos que ofrecen una amplia flexibilidad de escenario.
En plataformas que no son windows, los roles de servidor y terminal son una sola unidad porque no es necesario un nivel de compatibilidad de traducción entre un conjunto de API y secuencias de terminal virtual.
Productos de Microsoft
Todos los productos de la línea de comandos de Microsoft Windows ahora están disponibles en GitHub en un repositorio de código abierto, microsoft/terminal.
Host de consola de Windows
Esta es la interfaz de usuario tradicional de Windows para las aplicaciones de línea de comandos. Controla todo el servicio de API de consola al que se llama desde cualquier aplicación de línea de comandos adjunta. La consola de Windows también controla la representación gráfica de la interfaz de usuario (GUI) en nombre de todas esas aplicaciones. Se encuentra en el directorio del sistema como conhost.exeo openconsole.exe en su formato de código abierto. Viene con el sistema operativo Windows. También se puede encontrar en otros productos de Microsoft creados desde el repositorio de código abierto para una implementación más up-to-date de la infraestructura de pseudoconsola . Según las definiciones anteriores, funciona en un rol combinado de servidor y terminal tradicionalmente o en un rol de solo servidor a través de la infraestructura de pseudoconsola preferida.
Windows Terminal
Esta es la nueva interfaz de Windows para aplicaciones de línea de comandos. Terminal Windows sirve como ejemplo de primera entidad de uso de la pseudoconsola para separar las preocupaciones entre el mantenimiento de la API y la interacción de aplicaciones basadas en texto, de forma muy similar a todas las plataformas que no son de Windows.
Terminal Windows es la interfaz de usuario del modo de texto insignia para Windows. Muestra las funcionalidades del ecosistema y impulsa el desarrollo de Windows hacia la unificación con otras plataformas. Terminal Windows también es un ejemplo de cómo crear una aplicación moderna sólida y compleja que abarca el historial y la gama de api y marcos de Windows. Según las definiciones anteriores, este producto funciona en un rol de terminal.
Principales hitos históricos
Los principales hitos históricos del subsistema de consola se dividen en la implementación anterior a 2014 y, a continuación, se trasladan a una visión general del trabajo realizado desde 2014, cuando el enfoque renovado en la línea de comandos se formó en la era de Windows 10.
Implementación inicial
[1989-1990s] El sistema host de consola inicial se implementó como emulación del entorno dos dentro del sistema operativo Windows. Su código está entrelazado y cooperativo con el símbolo del sistema, cmd.exe, que es una representación de ese entorno de DOS. El código del sistema host de consola comparte responsabilidades y privilegios con el intérprete o shell del símbolo del sistema. También proporciona un nivel base de servicios para que otras utilidades de línea de comandos realicen servicios de forma similar a CMD.
DBCS para CJK
[1997-1999] En este momento, la compatibilidad con DBCS ("juego de caracteres de doble byte") se presenta para admitir mercados CJK (chino, japonés y coreano). Este esfuerzo da como resultado una bifurcación de muchos de los métodos de escritura y lectura dentro de la consola para proporcionar ambas versiones "occidentales" para tratar con caracteres de un solo byte, así como una representación alternativa para las versiones "orientales" donde se requieren dos bytes para representar la amplia matriz de caracteres. Esta bifurcación incluyó la representación en expansión de una celda en el entorno de consola para ser de 1 o 2 celdas de ancho, donde 1 celda es estrecha (más alta que es ancha) y 2 celdas es ancha, de ancho completo o un cuadrado en el que se pueden escribir ideógrafos chinos, japoneses y coreanos típicos.
Seguridad y aislamiento
[2005-2009] Con la experiencia del subsistema de consola que se ejecuta dentro del proceso crítico del sistema, , csrss.exela conexión de aplicaciones cliente con varios niveles de acceso, a un único proceso super-crítico y con privilegios se notó como especialmente peligroso. En esta era, el subsistema de consola se dividió en aplicaciones cliente, controlador y servidor. Cada aplicación podría ejecutarse en su propio contexto, lo que reduce las responsabilidades y los privilegios en cada una. Este aislamiento aumentó la solidez general del sistema, ya que cualquier error en el subsistema de consola ya no afectaba a otras funcionalidades de proceso críticas.
Mejoras en la experiencia del usuario
[2014-2016] Después de mucho tiempo de mantenimiento disperso generalmente del subsistema de consola por equipos ordenados en toda la organización, se formó un nuevo equipo centrado en el desarrollador para poseer e impulsar mejoras en la consola. Mejoras durante este tiempo incluidas: selección de líneas, cambio de tamaño de ventana suave, cambio de tamaño de texto, copia y pegado, compatibilidad con valores altos de PPP y un enfoque en Unicode, incluida la convergencia de la división entre el almacenamiento "occidental" y el "este" y los algoritmos de manipulación de flujos.
Cliente de terminal virtual
[2015-2017] Con la llegada del Subsistema de Windows para Linux, Los esfuerzos de Microsoft para mejorar la experiencia de Docker en Windows y la adopción de OpenSSH como tecnología de ejecución remota de la línea de comandos premier, las implementaciones iniciales de secuencias de terminal virtual se introdujeron en el host de consola. Esto permitió que la consola existente actúe como terminal, conectada directamente a esas aplicaciones nativas de Linux en sus respectivos entornos, representando atributos gráficos y de texto en la pantalla y devolviendo la entrada del usuario en el dialecto adecuado.
Servidor de terminal virtual
[2018] En los últimos veinte años, se crearon alternativas de terceros para el host de consola de bandeja de entrada para ofrecer productividad adicional para desarrolladores, centradas de forma destacada en las personalizaciones enriquecidas y las interfaces con pestañas. Estas aplicaciones siguen siendo necesarias para ejecutar y ocultar la ventana host de la consola. Se adjuntan como una aplicación "cliente" secundaria para extraer información del búfer en bucles de sondeo a medida que opera la aplicación cliente de la línea de comandos principal. Su objetivo era ser un terminal, como en otras plataformas, pero en el mundo de Windows donde los terminales no eran reemplazables.
En este período de tiempo, se introdujo la infraestructura de pseudoconsola . La pseudoconsola permite que cualquier aplicación inicie el host de consola en un modo no interactivo y se convierta en la interfaz final del terminal para el usuario. La limitación principal de este esfuerzo fue la promesa de compatibilidad continua de Windows en el mantenimiento de todas las API de consola de Windows publicadas para el futuro indefinido, al tiempo que proporciona una interfaz de hospedaje del servidor de reemplazo que coincide con lo que se espera en todas las demás plataformas: secuencias de terminal virtual. Por lo tanto, este esfuerzo realizó la imagen reflejada de la fase de cliente: el pseudoconsola proyecta lo que se mostraría en la pantalla como secuencias de terminal virtual para un host delegado e interpreta las respuestas en secuencias de entrada de formato Windows para el consumo de aplicaciones cliente.
Plan de desarrollo para el futuro
Aplicaciones de terminal
[2019-Now] Esta es la era de código abierto para el subsistema de consola, centrándose en el nuevo Terminal Windows. Anunciado durante la conferencia de Microsoft Build en mayo de 2019, Terminal Windows está completamente en GitHub en microsoft/terminal. La creación de la aplicación Terminal Windows sobre la plataforma refinada para pseudoconsola será el foco de esta era, lo que aporta una experiencia de terminal de primera clase directamente a los desarrolladores en la plataforma Windows.
Terminal Windows pretende no solo mostrar la plataforma , incluida la tecnología de interfaz WinUI , el modelo de empaquetado MSIX y la arquitectura de componentes de C++/WinRT , sino también como validación de la propia plataforma. Terminal Windows está impulsando a la organización de Windows a abrir y evolucionar la plataforma de aplicaciones según sea necesario para seguir elevando la productividad de los desarrolladores. El conjunto único de requisitos de usuario avanzado y desarrollador de Terminal Windows impulsa los requisitos modernos de la plataforma Windows para lo que esos mercados realmente necesitan de Windows.
Dentro del sistema operativo Windows, esto incluye retirar la interfaz de usuario del host de consola clásica de su posición predeterminada en favor de las secuencias de terminal windows, ConPTY y terminal virtual.
Por último, esta era pretende ofrecer una elección completa sobre la experiencia predeterminada, ya sea el producto de Terminal Windows o cualquier terminal alternativo.
Biblioteca de soporte técnico de cliente
[Futuro] Con la compatibilidad y documentación de secuencias de terminal virtual en el lado cliente, recomendamos encarecidamente a los desarrolladores de utilidades de línea de comandos de Windows que usen secuencias de terminal virtual en primer lugar sobre las API clásicas de Windows para obtener la ventaja de un ecosistema unificado con todas las plataformas. Sin embargo, una pieza importante que falta es que otras plataformas tienen una amplia gama de bibliotecas auxiliares del lado cliente para controlar la entrada, como la línea de lectura y la visualización gráfica como ncurses. Este elemento de mapa de ruta futuro concreto representa la exploración de lo que ofrece el ecosistema y cómo podemos acelerar la adopción de secuencias de terminal virtual en aplicaciones de línea de comandos de Windows a través de la API de consola clásica.
Paso a través de secuencia
[Futuro] La combinación de implementaciones de cliente y servidor de terminal virtual permite la combinación completa y la coincidencia de aplicaciones de hospedaje de terminal y línea de comandos cliente. Esta combinación puede hablar con las API clásicas de la consola de Windows o las secuencias de terminal virtual; sin embargo, hay un costo de sobrecarga para traducir esto al método clásico de Windows compatible y, a continuación, volver al método de terminal virtual más universal.
Una vez que el mercado adopta suficientemente secuencias de terminal virtual y UTF-8 en Windows, el trabajo de conversión/interpretación del host de consola se puede deshabilitar opcionalmente. A continuación, el host de consola se convertirá en un simple servicio de llamadas API y retransmisión desde llamadas de dispositivo a la aplicación de hospedaje a través de la pseudoconsola. Este cambio aumentará el rendimiento y maximizará el dialecto de las secuencias que se pueden hablar entre la aplicación cliente y el terminal. A través de este cambio, los escenarios de interactividad adicionales se habilitarían y (por último) llevarían al mundo de Windows a la alineación con la familia de todas las demás plataformas del espacio de aplicaciones de la línea de comandos.