Roadmap per l'ecosistema di console e Terminale Windows
Questo documento è una roadmap di alto livello dei prodotti console di Windows e Terminale Windows. Illustra gli aspetti seguenti:
La modalità in cui la console di Windows e Terminale Windows rientrano nell'ecosistema di applicazioni da riga di comando in Windows e altri sistemi operativi.
Una cronologia e una roadmap futura relativa ai prodotti, alle funzionalità e alle strategie che fanno parte della creazione della piattaforma e relativa anche alla creazione della piattaforma stessa.
Il punto centrale della fase operativa attuale della console e del terminale in Microsoft è quello di fornire un'esperienza terminale di primo livello direttamente agli sviluppatori della piattaforma Windows e di eliminare gradualmente le API della console di Windows classica, sostituendole con le sequenze di terminale virtuale usando la tecnologia pseudoconsole. Terminale Windows incarna questa transizione in un'esperienza di primo livello, invitando la community degli sviluppatori a una collaborazione open source, supportando una gamma completa di combinazioni e abbinamenti di applicazioni client da riga di comando e di hosting del terminale e unificando l'ecosistema Windows con tutte le altre piattaforme.
Definizioni
Prima di procedere, è consigliabile acquisire familiarità con le definizioni della terminologia comune usata in questo articolo. La terminologia comune include: applicazioni della riga di comando (o console), handle standard (STDIN
, STDOUT
, STDERR
) , dispositivi TTY e PTY, client e server, sottosistema della console, host console, pseudoconsole e terminale.
Architettura
L'architettura generale del sistema è costituita da quattro parti: client, dispositivo, server e terminale.
Client
Il client è un'applicazione da riga di comando che usa un'interfaccia basata su testo per consentire all'utente di immettere comandi (diversamente da un'interfaccia utente basata su mouse), restituendo una rappresentazione testuale del risultato. In Windows, l'API della console fornisce un livello di comunicazione tra il client e il dispositivo. Può anche trattarsi di un handle della console standard con le API dei controlli dei dispositivi.
Dispositivo
Il dispositivo è un livello di comunicazione intermedia per la gestione dei messaggi tra due processi: il client e il server. In Windows, si tratta del driver della console. Su altre piattaforme, è il dispositivo TTY o PTY. Altri dispositivi come file, pipe e socket possono essere usati con questa funzione di canale di comunicazione se l'intera transazione è in testo normale o contiene sequenze di terminale virtuale, ma non con le API della console di Windows.
Server
Il server interpreta le chiamate API o i messaggi richiesti dal client. In Windows con la modalità operativa classica, il server crea anche un'interfaccia utente per presentare l'output sullo schermo. Il server raccoglie inoltre l'input per inviare i messaggi di risposta al client, tramite il driver, come un terminale in bundle nello stesso modulo. Usando la modalità pseudoconsole, agisce invece solo come un traduttore che presenta queste informazioni in sequenze di terminale virtuale a un terminale collegato.
Terminale
Il terminale è il livello finale, che fornisce all'utente servizi di visualizzazione e interattività grafici. Si occupa di acquisire l'input e di codificarlo come sequenze di terminale virtuale, che possono raggiungere la funzione STDIN
del client. Inoltre, riceve e decodifica le sequenze di terminale virtuale ricevute dalla funzione STDOUT
del client per la presentazione sullo schermo.
Ulteriori connessioni
Come supplemento, è possibile eseguire ulteriori connessioni concatenando le applicazioni che svolgono più ruoli in uno degli endpoint. Una sessione SSH, ad esempio, è costituita da due ruoli: è un terminale per l'applicazione da riga di comando in esecuzione in un dispositivo, ma trasmette tutte le informazioni ricevute a un ruolo client in un altro dispositivo. Questo concatenamento può verificarsi a tempo indefinito tra i dispositivi e i contesti che offrono una grande flessibilità dello scenario.
Sulle piattaforme non Windows, i ruoli server e terminale costituiscono una singola unità perché non è necessario un livello di compatibilità della traduzione tra un set di API e le sequenze di terminale virtuale.
Prodotti Microsoft
Tutti i prodotti da riga di comando di Microsoft Windows sono ora disponibili in GitHub in un repository open source, microsoft/terminal.
Host della console di Windows
Si tratta dell'interfaccia utente tradizionale di Windows per le applicazioni da riga di comando. Gestisce la manutenzione delle API della console chiamata da qualsiasi applicazione da riga di comando collegata. La console di Windows gestisce anche la rappresentazione dell'interfaccia utente grafica per conto di tutte le applicazioni. Si trova nella directory di sistema come conhost.exe
o openconsole.exe
nel modulo open source. È integrata nel sistema operativo Windows. È disponibile anche in altri prodotti Microsoft creati dal repository open source per un'implementazione più aggiornata dell'infrastruttura pseudoconsole. In base alle definizioni precedenti, la console agisce in genere in un ruolo combinato tra server e terminale o in un ruolo solo server tramite l'infrastruttura pseudoconsole preferita.
Terminale Windows
Si tratta della nuova interfaccia utente di Windows per le applicazioni da riga di comando. Terminale Windows funge da esempio di primo livello per l'uso dell'infrastruttura pseudoconsole per separare le problematiche tra la manutenzione dell'API e l'interfaccia dell'applicazione basata su testo, così come tutte le piattaforme non Windows.
Terminale Windows è la principale interfaccia utente in modalità testo di Windows. Rappresenta le potenzialità dell'ecosistema e guida lo sviluppo di Windows verso l'unificazione con altre piattaforme. Terminale Windows funge anche da esempio per la creazione di un'applicazione moderna solida e complessa che abbraccia la cronologia e la gamma di framework e API Windows. In base alle definizioni precedenti, il prodotto agisce come ruolo terminale.
Principali tappe cronologiche
Le principali tappe cronologiche del sottosistema della console si suddividono in implementazioni precedenti al 2014 e quindi passano a una panoramica delle attività eseguite a partire dal 2014, epoca di un rinnovato interesse alla riga di comando corrispondente al lancio di Windows 10.
Implementazione iniziale
[1989-1990s] Il sistema host della console iniziale è stato implementato come emulazione dell'ambiente DOS all'interno del sistema operativo Windows. Il codice è legato e collabora con il prompt dei comandi, cmd.exe
, che è una rappresentazione dell'ambiente DOS. Il codice del sistema host della console condivide responsabilità e privilegi con l'interprete o la shell del prompt dei comandi. Fornisce inoltre un livello base di servizi per altre utilità da riga di comando per l'esecuzione di servizi in modo analogo alla riga di comando.
Supporto DBCS per il mercato CJK
[1997-1999] In questo periodo, il supporto DBCS ("Set di caratteri a byte doppio") è stato introdotto per supportare i mercati CJK (cinese, giapponese e coreano). Questo lavoro ha comportato una biforcazione dei vari metodi di scrittura e lettura nella console al fine di fornire le versioni "occidentali", che gestiscono i caratteri a byte singolo, nonché una rappresentazione alternativa per le versioni "orientali", in cui sono necessari due byte per rappresentare l'ampia gamma di caratteri. Questa biforcazione riguardava anche l'espansione nella rappresentazione delle celle nell'ambiente della console, che può avere l'ampiezza di una o due celle. Una cella è stretta (più alta che larga) e due celle sono larghe, a larghezza intera o di forma quadrata, in modo da potere inserire gli ideogrammi tipici della lingua cinese, giapponese e coreana.
Sicurezza/Isolamento
[2005-2009] Con l'esperienza del sottosistema della console in esecuzione all'interno del processo di sistema critico, csrss.exe
, la connessione di applicazioni client diverse, a diversi livelli di accesso, a un singolo processo supercritico e con privilegi è stato notato come particolarmente pericoloso. In questa fase, il sottosistema della console era suddiviso in applicazioni client, driver e server. Ogni applicazione poteva essere eseguita nel proprio contesto, riducendo le responsabilità e i privilegi di ognuna. Questo isolamento ha aumentato l'affidabilità generale del sistema, poiché tutti gli errori nel sottosistema della console non influivano più sulle altre funzionalità critiche del processo.
Miglioramento dell'esperienza utente
[2014-2016] Dopo un lungo periodo di manutenzione generale del sottosistema console da parte di team diversi nell'organizzazione, un nuovo team incentrato sullo sviluppatore è stato formato per possedere e promuovere miglioramenti nella console. I miglioramenti durante questo periodo hanno riguardato: selezione di righe, ridimensionamento di finestre smussate, propagazione del testo, operazioni di copia e incolla, supporto di valori DPI elevati e attenzione alla codifica Unicode, nonché la convergenza della divisione tra gli algoritmi di manipolazione dei flussi e dell'archiviazione per i paesi "occidentali" e "orientali".
Client del terminale virtuale
[2015-2017] Con l'arrivo del sottosistema Windows per Linux, Microsoft si impegna a migliorare l'esperienza di Docker in Windows e l'adozione di OpenSSH come tecnologia di esecuzione remota della riga di comando premier, le implementazioni iniziali delle sequenze di terminale virtuale sono state introdotte nell'host della console. In questo modo, la console esistente può agire da terminale, collegata direttamente alle applicazioni Linux native nei rispettivi ambienti, eseguendo il rendering degli attributi grafici e di testo nella visualizzazione e restituendo l'input dell'utente nel dialetto appropriato.
Server del terminale virtuale
[2018] Negli ultimi vent'anni, sono state create alternative di terze parti per l'host della console posta in arrivo per offrire maggiore produttività per gli sviluppatori, centrate in modo importante in personalizzazioni avanzate e interfacce a schede. Queste applicazioni hanno ancora bisogno di eseguire e nascondere la finestra dell'host della console. Si collegano come applicazione "client" secondaria per eliminare le informazioni del buffer nei cicli di polling, allo stesso modo dell'applicazione client da riga di comando principale. Il loro obiettivo era quello di agire come terminale, come su altre piattaforme, ma all'interno del sistema Windows dove i terminali non erano sostituibili.
In questo periodo, è stata introdotta l'infrastruttura pseudoconsole. Pseudoconsole consente a qualsiasi applicazione di avviare l'host della console in modalità non interattiva e diventare l'interfaccia terminale finale per l'utente. La limitazione principale di questo lavoro è stata cercare di garantire, per un periodo indefinito, una compatibilità continua delle API della console di Windows pubblicate e offrire, al tempo stesso, un'interfaccia di hosting del server sostitutiva corrispondente a quanto previsto in tutte le altre piattaforme: le sequenze di terminale virtuale. Di conseguenza, questo lavoro è stato speculare alla fase client: l'infrastruttura pseudoconsole proietta ciò che dovrebbe essere visualizzato sullo schermo come le sequenze di terminale virtuale per un host delegato e interpreta le risposte in sequenze di input in formato Windows per l'utilizzo da parte delle applicazioni client.
Roadmap per il futuro
Applicazioni di Terminale
[2019-Now] Questa è l'era open source per il sottosistema della console, concentrandosi sulla nuova Terminale Windows. Annunciato durante la conferenza Microsoft Build nel maggio 2019, Terminale Windows è interamente su GitHub nella sezione microsoft/terminal. La creazione dell'applicazione Terminale Windows basata sulla piattaforma avanzata per pseudoconsole sarà l'obiettivo di questa era, grazie alla quale è possibile offrire un'esperienza di terminale di primo livello direttamente agli sviluppatori della piattaforma Windows.
Terminale Windows è volto non solo a mostrare la piattaforma, inclusa la tecnologia dell'interfaccia WinUI, il modello di creazione pacchetti MSIX e l'architettura del componente C++/WinRT, ma ad agire anche come convalida della piattaforma stessa. Terminale Windows sta consentendo all'organizzazione di Windows di aprire e sviluppare la piattaforma dell'app in base alle esigenze, per continuare a migliorare la produttività degli sviluppatori. L'insieme unico delle esigenze di utenti esperti e sviluppatori di Terminale Windows guida i requisiti della moderna piattaforma Windows verso la reale richiesta del mercato.
Nell'ambito del sistema operativo Windows, ciò comporta la disattivazione dell'interfaccia utente dell'host della console classica dalla relativa posizione predefinita, a favore di Terminale Windows, ConPTY e le sequenze di terminale virtuale.
Infine, in questa era si intende offrire una possibilità di scelta completa rispetto all'esperienza predefinita, indipendentemente dal fatto che si tratti di un prodotto Terminale Windows o di eventuali terminali alternativi.
Libreria di supporto client
[Futuro] Con il supporto e la documentazione delle sequenze di terminale virtuale sul lato client, è consigliabile che gli sviluppatori di utilità della riga di comando di Windows usino prima le sequenze di terminale virtuali sulle API di Windows classiche per ottenere il vantaggio di un ecosistema unificato con tutte le piattaforme. Tuttavia, un significativo elemento mancante è rappresentato dal fatto che altre piattaforme hanno un'ampia gamma di librerie helper sul lato client per la gestione di input, come readline, e la visualizzazione grafica, come ncurses. Questo particolare elemento della roadmap per il futuro rappresenta l'offerta dell'ecosistema e il modo in cui è possibile accelerare l'adozione delle sequenze di terminale virtuale nelle applicazioni da riga di comando di Windows rispetto all'API della console classica.
Passaggio alla sequenza
[Futuro] La combinazione di implementazioni client e server del terminale virtuale consente la combinazione completa e la corrispondenza delle applicazioni di hosting della riga di comando client e del terminale. Questa combinazione può comunicare con le API della console di Windows classica o con le sequenze di terminale virtuale. È, tuttavia, previsto un costo in termini di overhead per la traduzione nel metodo Windows classico compatibile e quindi di nuovo nel metodo di terminale virtuale più universale.
Una volta che il mercato adotta le sequenze di terminale virtuale e UTF-8 in Windows in maniera sufficiente, è possibile disabilitare facoltativamente il processo di conversione/interpretazione dell'host della console. L'host della console diventa quindi un semplice servizio di chiamata API e di inoltro dalle chiamate del dispositivo all'applicazione host tramite l'infrastruttura pseudoconsole. Questa modifica consente di migliorare le prestazioni e massimizzare il dialetto delle sequenze che possono essere pronunciate tra l'applicazione client e il terminale. Grazie a questa modifica è possibile abilitare scenari di interattività aggiuntivi e (finalmente) allineare il sistema Windows con tutte le altre piattaforme nell'ambito delle applicazioni da riga di comando.