Sdílet prostřednictvím


Přehled konzoly Windows a ekosystému terminálu

Tento dokument představuje podrobný plán konzoly systému Windows a terminálových produktů systému Windows. Zahrnuje:

  • Jak se konzola Windows a terminál Windows hodí do ekosystému aplikací příkazového řádku napříč Windows a dalšími operačními systémy.

  • Historie a budoucí plán produktů, funkcí a strategií, které jsou součástí vytváření platformy, a také vytváření pro tuto platformu.

Cílem aktuální konzoly/terminálové éry v Microsoftu je přinést prvotřídní terminálové prostředí přímo vývojářům na platformě Windows a postupně vyřazovat klasická rozhraní API konzoly Windows a nahradit je sekvencemi virtuálních terminálůvyužívajícími pseudokonsole. Terminál Windows představuje tento přechod do prvotřídního prostředí, zvanou opensourcové spolupráce od komunity vývojářů, která podporuje celé spektrum kombinování a porovnávání klientských aplikací příkazového řádku a terminálových hostitelských aplikací a sjednocení ekosystému Windows se všemi ostatními platformami.

Definice

Než budete pokračovat, doporučujeme se seznámit s definicemi běžné terminologie používané v tomto prostoru. Mezi běžné terminologie patří: aplikace příkazového řádku (nebo konzoly),standardní popisovače (STDIN, , STDOUT), STDERRzařízení TTY a PTY, klienti a servery, subsystém konzoly, hostitel konzoly, pseudokonsole a terminál.

Architektura

Obecná architektura systému je ve čtyřech částech: klient, zařízení, server a terminál.

Zdroj vývojového diagramu komunikace příkazového řádku do cíle spuštěného z klienta na zařízení na server do terminálu

Klient

Klient je aplikace příkazového řádku, která používá textové rozhraní k tomu, aby uživatel mohl zadávat příkazy (místo uživatelského rozhraní založeného na myši) vracející textovou reprezentaci výsledku. Rozhraní API konzoly ve Windows poskytuje komunikační vrstvu mezi klientem a zařízením. (Může to být také standardní konzolový popisovač s rozhraními API pro řízení zařízení).

Zařízení

Zařízení je mezilehlé komunikační vrstvy pro zpracování zpráv mezi dvěma procesy, klientem a serverem. Ve Windows se jedná o ovladač konzoly. Na jiných platformách se jedná o zařízení TTY nebo PTY. Jiná zařízení, jako jsou soubory, kanály a sokety, mohou být použity jako tento komunikační kanál, pokud je celá transakce v prostém textu nebo obsahuje sekvence virtuálních terminálů, ale ne s rozhraními API konzoly Systému Windows.

počítačový server

Server interpretuje požadovaná volání rozhraní API nebo zprávy z klienta. Ve Windows v klasickém provozním režimu vytvoří server také uživatelské rozhraní pro prezentaci výstupu na obrazovku. Server navíc shromažďuje vstup pro odeslání zpět v odpovědích klientovi prostřednictvím ovladače, jako je terminál, který je součástí stejného modulu. Pomocí pseudokonsoleového režimu je místo toho pouze překladatel, který prezentuje tyto informace ve virtuálních terminálových sekvencích připojenému terminálu.

Terminál

Terminál je poslední vrstva poskytující uživateli grafické služby pro zobrazení a interaktivitu. Zodpovídá za zachytávání vstupu a kódování jako sekvence virtuálních terminálů, které nakonec dosáhnou klienta STDIN. Bude také přijímat a dekódovat sekvence virtuálních terminálů , které obdrží zpět z klientské STDOUT prezentace na obrazovce.

Další připojení

Jako dodatek je možné další připojení provádět zřetězenými aplikacemi, které obsluhují více rolí do jednoho z koncových bodů. Například relace SSH má dvě role: jedná se o terminál pro aplikaci příkazového řádku spuštěnou na jednom zařízení, ale předává všechny přijaté informace do role klienta na jiném zařízení. K tomuto zřetězení může docházet neomezeně dlouho napříč zařízeními a kontexty a nabízí širokou flexibilitu scénáře.

Na jiných platformách než Windows jsou role serveru a terminálu jedinou jednotkou, protože není potřeba vrstvu kompatibility překladu mezi sadami rozhraní API a sekvencemi virtuálních terminálů.

Produkty Microsoftu

Všechny produkty příkazového řádku Microsoft Windows jsou teď dostupné na GitHubu v opensourcovém úložišti microsoft/terminálu.

Hostitel konzoly Systému Windows

Toto je tradiční uživatelské rozhraní windows pro aplikace příkazového řádku. Zpracovává veškerou údržbu rozhraní API konzoly volanou z jakékoli připojené aplikace příkazového řádku. Konzola Systému Windows také zpracovává reprezentaci grafického uživatelského rozhraní (GUI) jménem všech těchto aplikací. Nachází se v systémovém adresáři jako conhost.exenebo openconsole.exe ve své opensourcové podobě. Dodává se s operačním systémem Windows. Najdete ho také v jiných produktech Microsoftu vytvořených z opensourcového úložiště pro další up-toimplementaci pseudokonsole infrastruktury. Podle výše uvedených definic funguje buď v kombinované roli serveru a terminálu, tradičně, nebo v roli pouze serveru prostřednictvím upřednostňované pseudokonsole infrastruktury.

Terminál Windows

Toto je nové rozhraní systému Windows pro aplikace příkazového řádku. Terminál Windows slouží jako příklad použití pseudokonsole k oddělení problémů mezi obsluhou rozhraní API a propojením textových aplikací, podobně jako u všech platforem jiných než Windows.

Terminál Windows je hlavním uživatelským rozhraním textového režimu pro Windows. Ukazuje možnosti ekosystému a řídí vývoj windows směrem ke sjednocení s jinými platformami. Terminál Windows je také příkladem toho, jak vytvořit robustní a složitou moderní aplikaci, která zahrnuje historii a gamut rozhraní API a architektur Windows. Podle výše uvedených definic tento produkt pracuje v terminálové roli.

Hlavní historické milníky

Hlavní historické milníky subsystému konzoly jsou rozděleny do implementace před 2014 a pak se přesunou do přehledu práce provedené od roku 2014, kdy se obnovený důraz na příkazový řádek vytvořil v éře Windows 10.

Počáteční implementace

[1989-1990s] Počáteční hostitelský systém konzoly byl implementován jako emulace prostředí DOS v operačním systému Windows. Jeho kód je propletený a spolupracuje s příkazovým řádkem , cmd.exeto je reprezentace tohoto prostředí DOS. Kód hostitelského systému konzoly sdílí odpovědnost a oprávnění s interpretem nebo prostředím příkazového řádku. Poskytuje také základní úroveň služeb pro další nástroje příkazového řádku k provádění služeb způsobem podobným cmd.

DBCS pro CJK

[1997–1999] V současnosti se zavádí podpora dbCS (dvoubajtová znaková sada) pro podporu trhů CJK (čínština, japonština a korejština). Výsledkem tohotoúsilího systému je mnoho metod zápisu a čtení uvnitř konzoly tak, aby poskytovaly "západní" verze, které umožňují pracovat s jednobajnovými znaky a alternativní reprezentací pro "východní" verze, kde jsou k reprezentaci obrovského pole znaků potřeba dva bajty. Toto rozvětvení zahrnovalo rozšiřující reprezentaci buňky v prostředí konzoly tak, aby byla 1 nebo 2 buňky široké, kde 1 buňka je úzká (vyšší, než je široká) a 2 buňky jsou široké, plné nebo jinak čtverec, ve kterém se dají připsat typické čínské, japonské a korejské ideografii.

Zabezpečení/ izolace

[2005–2009] Díky prostředí subsystému konzoly spuštěné uvnitř kritického systémového procesu bylo csrss.exepři připojování seřazených klientských aplikací na různých úrovních přístupu k jednomu superkritičtějšímu a privilegovanému procesu zaznamenáno jako obzvláště nebezpečné. V této éře se subsystém konzoly rozdělil na klientské, ovladače a serverové aplikace. Každá aplikace může běžet ve svém vlastním kontextu, čímž se sníží odpovědnost a oprávnění v každé aplikaci. Tato izolace zvýšila obecnou robustnost systému, protože jakékoli selhání v subsystému konzoly již neovlivňuje další důležité funkce procesu.

Vylepšení uživatelského prostředí

[2014–2016] Po dlouhé době obecně rozptýlené údržby subsystému konzoly podle různých týmů v celé organizaci byl vytvořen nový tým zaměřený na vývojáře, který vlastní a řídí vylepšení konzoly. Vylepšení během této doby: výběr řádku, hladké změny velikosti okna, přeformátování textu, kopírování a vložení, podpora vysokého DPI a zaměření na Unicode, včetně konvergence rozdělení mezi "západní" a "východní" úložiště a algoritmy manipulace s datovými proudy.

Klient virtuálního terminálu

[2015–2017] S příchodem subsystému Windows pro Linux se Microsoft snaží zlepšit prostředí Dockeru ve Windows a přijetí OpenSSH jako technologie pro vzdálené spouštění příkazového řádku premier, počáteční implementace sekvence virtuálních terminálů byly zavedeny do hostitele konzoly . Stávající konzole tak může fungovat jako terminál, připojený přímo k těmto linuxovým nativním aplikacím v příslušných prostředích, vykreslovat grafické a textové atributy zobrazení a vracet uživatelský vstup v příslušném dialektu.

Virtuální terminálový server

[2018] Během posledních dvaceti let byly vytvořeny alternativy třetích stran pro hostitele konzoly doručené pošty, které nabízejí další produktivitu vývojářů, výrazně zaměřené na bohaté přizpůsobení a rozhraní s kartami. Tyto aplikace stále potřebují ke spuštění a skrytí okna hostitele konzoly. Připojují se jako sekundární "klientská" aplikace k vyřazení informací o vyrovnávací paměti ve smyčce dotazování jako primární klientská aplikace příkazového řádku provozovaná. Jejich cílem bylo být terminál, jako na jiných platformách, ale na světě Windows, kde terminály nebyly vyměnitelné.

V tomto časovém období byla zavedena pseudokonsole infrastruktura. Pseudokonsole umožňuje libovolné aplikaci spustit hostitele konzoly v neinteraktivním režimu a stát se posledním terminálovým rozhraním uživatele. Hlavním omezením v tomto úsilí bylo trvalé zajištění kompatibility Systému Windows při údržbě všech publikovaných rozhraní API konzoly systému Windows pro neomezenou budoucnost a zároveň poskytování náhradního rozhraní pro hostování serveru, které odpovídalo očekávání na všech ostatních platformách: sekvence virtuálních terminálů. Proto tato snaha provedla zrcadlovou image fáze klienta: pseudokonsole projekty, které by se zobrazily na obrazovce jako sekvence virtuálních terminálů pro delegovaného hostitele a interpretuje odpovědi do vstupních sekvencí formátu Windows pro spotřebu klientských aplikací.

Plán pro budoucnost

Terminálové aplikace

[2019-Nyní] Toto je opensourcová éra pro subsystém konzoly, která se zaměřuje na nový terminál Windows. Během konference Microsoft Build v květnu 2019 byl terminál Windows zcela na GitHubu na microsoft/terminálu. Vytváření aplikace Terminálu Windows nad zpřesněnou platformou pro pseudokonsole bude zaměření této éry a přináší prvotřídní terminálové prostředí přímo vývojářům na platformě Windows.

Terminál Windows hodlá nejen prezentovat platformu , včetně technologie rozhraní WinUI , modelu balení MSIX a architektury komponent C++/WinRT , ale také jako ověření samotné platformy. Terminál Windows vynutí organizaci s Windows, aby v případě potřeby otevřela a vyvinula aplikační platformu, aby pokračovala ve zvyšování produktivity vývojářů. Jedinečná sada požadavků na power uživatele a vývojáře v terminálu Windows řídí moderní požadavky platformy Windows na to, co tyto trhy skutečně potřebují z Windows.

V operačním systému Windows to zahrnuje vyřazení klasického uživatelského rozhraní hostitele konzoly z výchozí pozice ve prospěch terminálu Windows, ConPTY a sekvence virtuálních terminálů.

A konečně, tato éra hodlá nabídnout plnou volbu nad výchozím prostředím, ať už se jedná o terminál Windows nebo jakýkoli alternativní terminál.

Klientská knihovna podpory

[Budoucnost] Díky podpoře a dokumentaci posloupností virtuálních terminálů na straně klienta důrazně doporučujeme vývojářům příkazového řádku systému Windows používat sekvence virtuálních terminálů nejprve přes klasická rozhraní API systému Windows, abychom získali výhodu jednotného ekosystému se všemi platformami. Jednou z důležitých chybějících částí je, že ostatní platformy mají širokou škálu pomocných knihoven na straně klienta pro zpracování vstupu, jako je čtení a grafické zobrazení, jako je ncurses. Tento konkrétní prvek budoucí roadmapy představuje zkoumání toho, co ekosystém nabízí a jak můžeme zrychlit přijetí sekvence virtuálních terminálů v aplikacích příkazového řádku Windows přes klasické rozhraní API konzoly.

Průchozí sekvence

[Budoucnost] Kombinace implementace klienta virtuálního terminálu a serveru umožňuje úplné kombinování a porovnávání klientských aplikací příkazového řádku a terminálových hostitelských aplikací. Tato kombinace může mluvit s klasickými rozhraními API konzoly Systému Windows nebo sekvencemi virtuálních terminálů, ale náklady na převod do klasické kompatibilní metody Windows a pak zpět do univerzální metody virtuálního terminálu.

Jakmile trh dostatečně přijme sekvence virtuálních terminálů a UTF-8 ve Windows, může být úloha převodu/interpretace hostitele konzoly volitelně zakázána. Hostitel konzoly by se pak stal jednoduchým servisním nástrojem pro volání rozhraní API a předával z volání zařízení do hostitelské aplikace prostřednictvím pseudokonsole. Tato změna zvýší výkon a maximalizuje dialekt sekvencí, které lze vyslovovat mezi klientskou aplikací a terminálem. Díky této změně by byly povoleny další scénáře interaktivity a (nakonec) by svět Windows byl v souladu s rodinou všech ostatních platforem v prostoru aplikace příkazového řádku.