Delen via


Roadmap voor Windows-console en terminalecosysteem

Dit document is een roadmap op hoog niveau van de Windows Console- en Windows Terminal-producten. Hierin wordt het volgende behandeld:

  • Hoe Windows Console en Windows Terminal passen in het ecosysteem van opdrachtregeltoepassingen in Windows en andere besturingssystemen.

  • Een geschiedenis en toekomstige roadmap van de producten, functies en strategieën die deel uitmaken van het bouwen van het platform, evenals het bouwen voor dit platform.

De focus van het huidige console-/terminaltijdperk bij Microsoft is om een eersteklas terminalervaring rechtstreeks naar ontwikkelaars op het Windows-platform te brengen en klassieke Windows Console-API's uit te faseren , waarbij ze worden vervangen door virtuele terminalreeksen die gebruikmaken van pseudoconsole. Windows Terminal laat deze overgang zien in een eersteklas ervaring, nodigt open source-samenwerking uit vanuit de ontwikkelaarscommunity, ondersteunt een volledig spectrum van mixen en matching van client-opdrachtregel- en terminalhostingtoepassingen en het samenvoegen van het Windows-ecosysteem met alle andere platforms.

Definities

Het is raadzaam om vertrouwd te raken met de definities van algemene terminologie die in deze ruimte worden gebruikt voordat u doorgaat. Algemene terminologie omvat: Opdrachtregeltoepassingen (of consoletoepassingen),standaardgrepen (STDIN, , STDOUTSTDERR) , TTY- en PTY-apparaten, clients en servers, consolesubsysteem, consolehost, pseudoconsole en terminal.

Architectuur

De algemene architectuur van het systeem bestaat uit vier onderdelen: client, apparaat, server en terminal.

Bron van opdrachtregelcommunicatiestroomdiagram naar bestemming die wordt uitgevoerd van client naar apparaat naar server naar terminal

Cliënt

De client is een opdrachtregeltoepassing die gebruikmaakt van een op tekst gebaseerde interface om de gebruiker in staat te stellen opdrachten in te voeren (in plaats van een gebruikersinterface op basis van een muis), waarmee een tekstweergave van het resultaat wordt geretourneerd. In Windows biedt de Console-API een communicatielaag tussen de client en het apparaat. (Dit kan ook een standaardconsolehandgreep zijn met apparaatbeheer-API's).

Apparaat

Het apparaat is een tussenliggende communicatielaag voor berichtafhandeling tussen twee processen, de client en de server. In Windows is dit het consolestuurprogramma. Op andere platforms is het het TTY- of PTY-apparaat. Andere apparaten, zoals bestanden, pijpen en sockets, kunnen worden gebruikt als dit communicatiekanaal als de hele transactie zich in tekst zonder opmaak bevindt of virtuele terminalreeksen bevat, maar niet met Windows Console-API's.

Serverapparaat

De server interpreteert de aangevraagde API-aanroepen of berichten van de client. In Windows in de klassieke besturingssysteemmodus maakt de server ook een gebruikersinterface om de uitvoer op het scherm weer te geven. De server verzamelt bovendien invoer voor het terugsturen van antwoordberichten naar de client, via het stuurprogramma, zoals een terminal die in dezelfde module is gebundeld. Met de pseudoconsolemodus is het in plaats daarvan slechts een vertaler om deze informatie in virtuele terminalreeksen aan een gekoppelde terminal te presenteren.

Luchthaventerminal

De terminal is de laatste laag die grafische weergave- en interactiviteitsservices aan de gebruiker biedt. Het is verantwoordelijk voor het vastleggen van invoer en het coderen als virtuele terminalreeksen, die uiteindelijk de client STDINbereiken. Ook worden de virtuele terminalreeksen die worden ontvangen van de client STDOUT voor presentatie op het scherm ontvangen en gedecodeerd.

Verdere verbindingen

Als addendum kunnen verdere verbindingen worden uitgevoerd door toepassingen te koppelen die meerdere rollen in een van de eindpunten leveren. Een SSH-sessie heeft bijvoorbeeld twee rollen: het is een terminal voor de opdrachtregeltoepassing die op één apparaat wordt uitgevoerd, maar alle ontvangen informatie doorstuurt naar een clientrol op een ander apparaat. Deze keten kan voor onbepaalde tijd plaatsvinden op alle apparaten en contexten die een brede flexibiliteit bieden voor scenario's.

Op niet-Windows-platforms zijn de server - en terminalrollen één eenheid, omdat er geen compatibiliteitslaag voor vertaling nodig is tussen een API-set en virtuele terminalreeksen.

Microsoft-producten

Alle Microsoft Windows-opdrachtregelproducten zijn nu beschikbaar op GitHub in een opensource-opslagplaats, microsoft/terminal.

Windows-consolehost

Dit is de traditionele Windows-gebruikersinterface voor opdrachtregeltoepassingen. Het verwerkt alle console-API-onderhoud dat wordt aangeroepen vanuit een gekoppelde opdrachtregeltoepassing. Windows Console verwerkt ook de weergave van de grafische gebruikersinterface (GUI) namens al deze toepassingen. Deze bevindt zich in de systeemmap als conhost.exeof openconsole.exe in de opensource-vorm. Het wordt geleverd met het Windows-besturingssysteem. Het is ook te vinden in andere Microsoft-producten die zijn gebouwd vanuit de opensource-opslagplaats voor een meer up-to-datumimplementatie van de pseudoconsole-infrastructuur . Volgens de bovenstaande definities werkt het in een gecombineerde server- en terminalrol traditioneel of een serverrol alleen via de voorkeurs pseudoconsole-infrastructuur .

Windows Terminal

Dit is de nieuwe Windows-interface voor opdrachtregeltoepassingen. Windows Terminal fungeert als een eerste voorbeeld van het gebruik van de pseudoconsole om de zorgen tussen API-onderhoud en tekstgebaseerde toepassings-interfacing te scheiden, net als alle niet-Windows-platforms.

Windows Terminal is de belangrijkste gebruikersinterface voor tekstmodus voor Windows. Het demonstreert de mogelijkheden van het ecosysteem en is het stimuleren van Windows-ontwikkeling om samen te werken met andere platforms. Windows Terminal is ook een voorbeeld van het bouwen van een robuuste en complexe moderne toepassing die de geschiedenis en het gamuteren van Windows-API's en frameworks omvat. Volgens de bovenstaande definities werkt dit product in een terminalrol.

Belangrijke historische mijlpalen

De belangrijkste historische mijlpalen voor het consolesubsysteem worden vóór 2014 onderverdeeld in implementatie en worden vervolgens verplaatst naar een overzicht van werk dat sinds 2014 is uitgevoerd, toen de vernieuwde focus op de opdrachtregel werd gevormd in het Windows 10-tijdperk.

Eerste implementatie

[1989-1990s] Het eerste consolehostsysteem is geïmplementeerd als emulatie van de DOS-omgeving binnen het Windows-besturingssysteem. De code is verstrengeld en coöperatief met de opdrachtprompt, cmd.exedie een representatie is van die DOS-omgeving. De consolehostsysteemcode deelt verantwoordelijkheden en bevoegdheden met de opdrachtprompt-interpreter/shell. Het biedt ook een basisniveau van services voor andere opdrachtregelprogramma's om services op een CMD-achtige manier uit te voeren.

DBCS voor CJK

[1997-1999] Rond deze tijd wordt DBCS-ondersteuning ("Double-byte character set") geïntroduceerd ter ondersteuning van CJK -markten (Chinees, Japans en Koreaans). Deze inspanning resulteert in een bifurcation van veel van de schrijf- en leesmethoden in de console om zowel 'westerse' versies te bieden om te gaan met single-byte-tekens en een alternatieve weergave voor 'eastern'-versies waarbij twee bytes nodig zijn om de enorme matrix met tekens weer te geven. Deze bifurcation bevatte de uitbreidbare weergave van een cel in de consoleomgeving als 1 of 2 cellen breed, waarbij 1 cel smal is (groter dan deze breed is) en 2 cellen breed, volledig breed of anderszins een vierkant waarin typische Chinese, Japanse en Koreaanse ideografieën kunnen worden ingeschreven.

Beveiliging/isolatie

[2005-2009] Met de consolesubsysteemervaring die wordt uitgevoerd binnen het kritieke systeemproces, werd csrss.exehet verbinden van verschillende clienttoepassingen, op verschillende toegangsniveaus, aan één superkritisch en bevoegd proces gezien als bijzonder gevaarlijk. In dit tijdperk is het consolesubsysteem gesplitst in client-, stuurprogramma- en servertoepassingen. Elke toepassing kan in hun eigen context worden uitgevoerd, waardoor de verantwoordelijkheden en bevoegdheden in elke toepassing worden verminderd. Door deze isolatie is de algemene robuustheid van het systeem toegenomen, omdat eventuele fouten in het consolesubsysteem geen invloed meer hebben op andere kritieke procesfunctionaliteit.

Verbeteringen in de gebruikerservaring

[2014-2016] Na een lange tijd van algemeen verspreid onderhoud van het consolesubsysteem door verschillende teams in de hele organisatie, werd een nieuw team met prioriteit voor ontwikkelaars gevormd om eigenaar te zijn en verbeteringen in de console aan te brengen. Verbeteringen in deze periode zijn onder andere: lijnselectie, vloeiende grootte van vensters, het wijzigen van tekst, kopiëren en plakken, hoge DPI-ondersteuning en een focus op Unicode, inclusief de convergentie van de splitsing tussen 'west' en 'eastern' opslag en stroommanipulatiealgoritmen.

Virtual Terminal-client

[2015-2017] Met de komst van het Windows-subsysteem voor Linux, proberen Microsoft de ervaring van Docker in Windows te verbeteren en de acceptatie van OpenSSH als de belangrijkste technologie voor het uitvoeren van externe opdrachtregels, zijn de eerste implementaties van virtuele terminalreeksen geïntroduceerd in de consolehost. Hierdoor kan de bestaande console fungeren als de terminal, die rechtstreeks is gekoppeld aan die systeemeigen Linux-toepassingen in hun respectieve omgevingen, grafische en tekstkenmerken weergeven op de weergave en gebruikersinvoer retourneren in het juiste dialect.

Virtual Terminal-server

[2018] In de afgelopen twintig jaar zijn alternatieven van derden voor de consolehost voor Postvak IN gemaakt om extra productiviteit voor ontwikkelaars te bieden, prominent gecentreerd in uitgebreide aanpassingen en interfaces met tabbladen. Deze toepassingen zijn nog steeds nodig om het consolehostvenster uit te voeren en te verbergen. Ze koppelen als een secundaire clienttoepassing om buffergegevens in polling-lussen te scrapen terwijl de primaire opdrachtregelclienttoepassing wordt uitgevoerd. Hun doel was om een terminal te zijn, zoals op andere platforms, maar in de Windows-wereld waar terminals niet te vervangen waren.

In deze periode werd de pseudoconsole-infrastructuur geïntroduceerd. Pseudoconsole staat elke toepassing toe om de consolehost in een niet-interactieve modus te starten en de uiteindelijke terminalinterface voor de gebruiker te worden. De belangrijkste beperking in deze inspanning was de voortdurende compatibiliteitsbelofte van Windows bij het onderhouden van alle gepubliceerde Windows Console-API's voor de onbepaalde toekomst, terwijl het bieden van een vervangende serverhostinginterface die overeenkomt met wat wordt verwacht op alle andere platforms: virtuele terminalreeksen. Als zodanig heeft deze inspanning de gespiegelde afbeelding van de clientfase uitgevoerd: de pseudoconsole projecten die op het scherm worden weergegeven als virtuele terminalreeksen voor een gedelegeerde host en antwoorden interpreteren in invoerreeksen in Windows-indeling voor het verbruik van clienttoepassingen.

Roadmap voor de toekomst

Terminaltoepassingen

[2019-Nu] Dit is het opensource-tijdperk voor het consolesubsysteem, gericht op de nieuwe Windows-terminal. Aangekondigd tijdens de Microsoft Build-conferentie in mei 2019, bevindt Windows Terminal zich volledig op GitHub bij microsoft/terminal. Het bouwen van de Windows Terminal-toepassing op het verfijnde platform voor pseudoconsole is de focus van dit tijdperk, waardoor een eersteklas terminalervaring rechtstreeks aan ontwikkelaars op het Windows-platform wordt gebracht.

Windows Terminal is niet alleen van plan om het platform te presenteren, waaronder de WinUI-interfacetechnologie , het MSIX-pakketmodel en de architectuur van het C++/WinRT-onderdeel , maar ook als validatie van het platform zelf. Windows Terminal drijft de Windows-organisatie naar behoefte aan het openen en ontwikkelen van het app-platform om de productiviteit van ontwikkelaars te blijven verhogen. De unieke set power user- en ontwikkelaarsvereisten van Windows Terminal stimuleren de moderne Windows-platformvereisten voor wat deze markten echt nodig hebben vanuit Windows.

Binnen het Windows-besturingssysteem omvat dit het buiten gebruik stellen van de gebruikersinterface van de klassieke consolehost van de standaardpositie ten gunste van Windows Terminal, ConPTY en virtuele terminalreeksen.

Ten slotte is dit tijdperk van plan om volledige keuze te bieden boven de standaardervaring, of het nu het Windows Terminal-product of andere terminals is.

Clientondersteuningsbibliotheek

[Toekomst] Met de ondersteuning en documentatie van virtuele terminalreeksen aan de clientzijde raden we ontwikkelaars van windows-opdrachtregelprogramma's ten zeerste aan om eerst virtuele terminalreeksen te gebruiken via de klassieke Windows-API's om het voordeel te krijgen van een geïntegreerd ecosysteem met alle platforms. Een belangrijk ontbrekend stuk is echter dat andere platforms een breed scala aan helperbibliotheken aan de clientzijde hebben voor het verwerken van invoer, zoals leeslijn en grafische weergave, zoals ncurses. Dit specifieke toekomstige roadmapelement vertegenwoordigt de verkenning van wat het ecosysteem biedt en hoe we de acceptatie van virtuele terminalreeksen in Windows-opdrachtregeltoepassingen kunnen versnellen via de klassieke Console-API.

Passthrough voor reeks

[Toekomst] De combinatie van client- en server-implementaties van virtuele terminal maakt het volledig combineren en koppelen van client-opdrachtregel- en terminalhostingtoepassingen mogelijk. Deze combinatie kan spreken met de klassieke Windows Console-API's of virtuele terminalreeksen, maar er zijn overheadkosten om dit te vertalen naar de klassieke compatibele Windows-methode en vervolgens terug naar de meer universele virtuele terminalmethode.

Zodra de markt voldoende virtuele terminalreeksen en UTF-8 op Windows aanneemt, kan de conversie-/interpretatietaak van de consolehost optioneel worden uitgeschakeld. De consolehost zou vervolgens een eenvoudige API-aanroepservicer worden en worden doorgegeven van apparaataanroepen naar de hostingtoepassing via de pseudoconsole. Deze wijziging verhoogt de prestaties en maximaliseert het dialect van reeksen die kunnen worden gesproken tussen de clienttoepassing en de terminal. Door deze wijziging worden aanvullende interactiviteitsscenario's ingeschakeld en (ten slotte) wordt de Windows-wereld in overeenstemming gebracht met de familie van alle andere platforms in de opdrachtregeltoepassingsruimte.