DOS, Windows i ochrona pamięci

Windows jest dzisiaj najpopularniejszym systemem operacyjnym na biurkach, cieszącym się najlepszym wsparciem i dużą ilością oprogramowania. Jego prawdopodobnie największa zaleta stała się też jego największą przeszkodą w rozwoju – kompatybilność wsteczna. System musi się rozwijać, lecz jednocześnie musi to robić w taki sposób, by nie popsuć działania tej góry oprogramowania i sterowników. Nie jest to łatwe i prowadzi do różnych sytuacji. Obecnie Windows kojarzy się niemal wyłącznie z Windows NT – w końcu linia 9x oparta na DOS umarła wraz z zakończeniem wsparcia dla Windows 98 i ME w 2006 roku. Dlaczego linia 9x istniała tak długo, pomimo że NT był już gotowy w 1993? Czy to kwestia wspomnianej kompatybilności? A może czegoś innego?

OS/2, DOS i ochrona pamięci

Historia Windows NT nierozerwalnie związana jest ze współpracą Microsoftu i IBM w połowie lat 80 mających na celu stworzyć nowoczesnego następcę DOSa. Z DOSem ogólnie jest dość śmieszna historia. System był dość prymitywny w porównaniu do konkurencji i próżno było w nim szukać takich mechanizmów jak pełna wielozadaniowość (dostępna w ograniczonym stopniu dzięki tzw. programom rezydentnym) czy ochrona pamięci wprowadzona przez procesor Intel 80286, a znacząco rozbudowana w Intel 80386 i pozbawiona dość istotnej wady. Mianowicie procesor Intel 286 wprowadził nowy tryb pracy zwany trybem chronionym. Był to tryb doprawdy genialny – pozbawiony był ograniczenia pamięci 1 MiB (a właściwie to około 640 KiB, gdyż reszta była zarezerwowana dla BIOS i sprzętu), wprowadzał mechanizmy ochrony pamięci oraz pozwalał na pełnoprawną i bezpieczną wielozadaniowość. Aplikacje nie mogły już swobodnie buszować po pamięci, gdyż odpowiednio napisany system operacyjny wykorzystujący nowy tryb nigdy im na to nie pozwoli. Tryb chroniony był jednak opcjonalny. Intel nie mógł sobie pozwolić na zerwanie kompatybilności, więc wszelkie te udogodnienia system operacyjny musiał sobie włączyć. Procesor uruchamiał się w trybie rzeczywistym, który działał dokładnie tak jak jego poprzednicy. Istotną wadą procesora 286 był fakt, że z trybu chronionego nie dało się łatwo wrócić do trybu rzeczywistego. Był to schemat wykorzystywany później przez m.in. DOSa, co pozwalało mu omijać niektóre jego limity. Programy wykorzystując specjalny interfejs (np. DPMI) mogły przejść w tryb chroniony, a po zakończeniu pracy wrócić do trybu rzeczywistego. Dlatego też procesor Intel 286 nigdy nie zdobył dużej popularności, do czego wkład miała też jego wysoka cena. Dopiero Intel 80386 usunął to ograniczenie i wprowadził parę nowości, z których najważniejsze to pełne przejście na 32 bity (286 był ciągle 16 bitowy) oraz wprowadzenie mechanizmu stronicowania pamięci znacząco ułatwiającego implementację pamięci wirtualnej. Górna granica RAM urosła z 16 MiB poprzednika do 4 GiB. Wprowadził też bardzo istotną rzecz – Wirtualny Tryb 8086. Wprawdzie 386 mógł wrócić do trybu rzeczywistego dużo łatwiej niż poprzednik, lecz nie zawsze było to najwygodniejszą i najlepszą opcją. Dzięki wirtualnemu trybowi 8086 nowy procesor mógł symulować działanie procesora Intel 8086 (a więc i trybu rzeczywistego) ciągle pracując w trybie chronionym i dając systemowi większą kontrolę nad aplikacjami uruchamianymi w ramach tego trybu. Możliwe więc było wykorzystywanie udogodnień starszego trybu wykorzystując jednocześnie zalety nowszego. Tryb rzeczywisty bowiem miał pewną zaletę – BIOS udostępniał programom zbiór funkcji (służących chociażby do takich rzeczy jak odczytywanie stanu klawiatury, zapisywanie lub odczyt danych z nośników czy pisanie/rysowanie po ekranie). Przechodząc w tryb chroniony to wszystko znikało – trzeba było sobie napisać to samemu. Dzięki wirtualnemu trybowi 8086 można było w ograniczonym stopniu korzystać z tych funkcji, co było także kluczowe dla kompatybilności wstecznej. W końcu programowa emulacja procesora to nawet dzisiaj dość trudne i złożone obliczeniowo zadanie, by po prostu napisać sobie emulator 8086 (chociaż dzisiaj pisze się je nawet w JavaScript).

DOS nie był w stanie skorzystać tych nowości, pomimo że procesor Intel 386 został wprowadzony na rynek zaledwie 4 lata po jego premierze. DOS cierpiał na ten sam problem, co dzisiaj Windows – kompatybilność wsteczna. Przez te 4 lata na system Microsoftu powstało wiele softu, z czego wiele stosowało różne sztuczki by omijać jego ograniczenia. Projekty mające na celu unowocześnienie systemu, takie jak Multitasking MS-DOS czy planowany DOS 5 mający wykorzystywać tryb chroniony nie doszły do skutku, lub doszły, ale mało kogo interesowały. Nikt też nie chciał wywalić go do kosza i odciąć się od tych wszystkich aplikacji już na niego napisanych. Zamiast tego Microsoft i IBM uznali, że lepiej jest od zera stworzyć nowy system operacyjny, pozwalający uruchamiać aplikacje DOSa a jednocześnie nie będący obciążony jego ograniczeniami. Produkt początkowo nazwany CP/DOS (Control Program/DOS), czy DOS5, 286-DOS, Big-DOS w roku 1986 lub 1987 przyjął swoją nazwę, która towarzyszyła mu aż do jego końca – OS/2. System z jakiegoś powodu postanowiono oprzeć na architekturze Intel 286 (choć mogę się tylko domyślać, że powodem była początkowo wysoka cena procesora 386 i jego niska powszechność), która okazała się nieprzyszłościowa i szybko wyparta przez następcę. Niemniej jednak pod koniec 1987 roku OS/2 ujrzał światło dzienne w wersji 1.0.

Pomimo oparcia na architekturze 286, nowy system okazał się obiecującym tworem. Chociaż początkowo brakło interfejsu graficznego (szybko dodanego w wersji 1.1) był niemal we wszystkim lepszy od klasycznego DOSa. Nowy system był wielozadaniowy, zapewniał pełną ochronę pamięci oraz udostępniał bogate API do wielu rzeczy, nie zmuszając programistów do wykorzystywania funkcji BIOS. Dzięki sesji kompatybilności (której stworzenie było niezwykle trudne przez ograniczenia procesora 286) był też w kompatybilny ze swoim starszym bratem, udostępniono też API pozwalające pisać aplikacje działające na obu systemach. Kolejne wersje OS/2 tylko pogłębiły tę przewagę, gdyż poza graficznym interfejsem, system doczekał się też nowoczesnego systemu plików HPFS, nie obarczonymi tak wieloma limitami jak FAT używany przez DOSa. Microsoft jednak nigdy nie porzucił pracy nad własnymi rozwiązaniami, które w pewnym momencie urosły do rangi konkurenta OS/2. Wersja 1.3 OS/2 wydana w 1991 roku była kresem klasycznego OS/2 rozwijanego wspólnie przez Microsoft i IBM, a w konsekwencji od niej zaczęła się też powolna śmierć tego systemu, choć to przez wiele lat nie było jeszcze oczywiste.

Pamięć w Windowsie

W tym samym czasie powstawało inne środowisko (bo ciężko było je nazwać systemem operacyjnym) – Windows od Microsoftu. Jego pierwsza wersja została wydana w 1985 roku. Jako nakładka graficzna na DOS’a oczywiście początkowo nie wprowadzał żadnych istotnych nowości w kwestii technicznej. Projekt jednak miał potencjał przez API pozwalające łatwo pisać aplikacje czy sterowniki na nową nakładkę. Po Windowsie 1.x dwa lata później światło dzienne ujrzał Windows 2.0. Poza ulepszeniami wprowadzał też stos-owy menedżer okien, który pozwalał oknom na siebie nachodzić (w Windows 1.x to było nie możliwe). M.in. za to Apple wtedy pozwał Microsoft.

Wydany rok później Windows 2.1 był w stanie skorzystać z niektórych funkcji procesora Intel 286 oraz Intel 386, a także jako pierwszy Windows, wymagał instalacji na dysku twardym. Powstały dwie edycje Windows zwane Windows/286 i Windows/386. Ten pierwszy dzięki zmianom w procesorze Intel 80286 mógł skorzystać z pamięci nieco powyżej magicznej granicy 1 MiB dzięki sterownikowi HIMEM.SYS. Wbrew swojej nazwie nie wymagał procesora 286 – na starszych rozszerzona pamięć (zwana skrótowo HMA) po prostu nie była dostępna, lecz nakładka mogła się obyć bez niej. O wiele bardziej rozwojowy był Windows/386. Jądro nakładki w tej edycji pracowało w trybie chronionym, a aplikacje trybu rzeczywistego były uruchamiane za pomocą trybu wirtualnego 8086. Dało to przykładowo możliwość uruchamiania (aczkolwiek ograniczonego na tym etapie) kilku aplikacji DOS naraz mogących pracować jednocześnie. Swoje własne aplikacje Windows również uruchamiał w ten sposób. Oczywiście nie była to taka wielozadaniowość, jaką znamy dzisiaj – wykorzystano powszechną wtedy technikę o nazwie cooperative multitasking (w języku polskim można ją określić jako wielozadaniowość bez wywłaszczenia). Jak proces nic nie robił, to oddawał swój czas procesora innym procesom. Nie trudno się domyślić, że taka technika mogła doprowadzić do zawieszenia systemu, kiedy jeden proces zajął się czymś bardziej skomplikowanym i skonsumował cały czas procesora dla siebie. Dlatego dzisiaj już się nie używa tej techniki. Jednak wtedy to i tak był spory skok naprzód względem kompletnego braku wielozadaniowości. Wprowadzono również emulację pamięci EMS (tej powyżej bariery 640 KiB dla pamięci użytkowej). Brak obsługi pamięci wirtualnej zapisywanej na dysku powodował, że programy musiały się zmieścić w pamięci konwencjonalnej. Amerykański magazyn BYTE w 1989 roku nazwał Windows/386 jako „poważną konkurencją dla OS/2” dzięki wykorzystaniu funkcjonalności procesora 386.

Kolejną ewolucją był Windows 3.0 wydany w 1989 roku. Powstał po tym, jak David Weise i Murray Sargent samodzielnie zdecydowali się poeksperymentować z Windowsem pracującym w trybie chronionym, a wyniki ich prac zrobiły na firmie takie wrażenie, że zostały podniesione do rangi oficjalnego projektu. Wprowadzono nową powłokę zastępującą MS-DOS Executive pamiętającą początki Windowsa – Progman wraz z oryginalnie nazywającym się menedżerem plików File Manager (którego kod dzisiaj jest otwarty) zastąpiły prostą przeglądarkę plików służącą za powłokę. Udoskonalono już istniejące aplikacje i wprowadzono nowe, takie jak słynny Pasjans. 3.0 mógł pracować w trzech trybach zwanych kolejno - „Rzeczywisty” dla trybu rzeczywistego i procesorów starszych od 286, „Standardowy” dla procesora 286 i „Rozszerzony 386” dla 386. Tryb rzeczywisty istniał głównie dla aplikacji wcześniejszych wersji. Aplikacje pisane z myślą o 3.0 wykorzystywały tryb standardowy lub rozszerzony. Tryb rzeczywisty był jednak wymagany dla uruchomienia SWAPFILE.EXE pozwalającym ustawić parametry pamięci wirtualnej, oraz pozwalał na wykorzystanie 4 MB pamięci EMS. Tryb standardowy wydawał się najpopularniejszym, przez dość rozsądne wymagania jakim był procesor conajmniej 286 i 1 MB RAM. Bywał też używany nawet na procesorach 386, gdyż wiele miało 1 lub 2 MB RAM, oraz często używało okrojonego chipu 386SX z 16 bitową szyną, który nie był w stanie uruchomić trybu rozszerzonego. Tryb rozszerzony różnił się wykorzystaniem trybu wirtualnego 8086, co pozwalało na wielozadaniowość w aplikacjach DOS. W przeciwieństwie do Windows 2.1 z jego Windows/386, tutaj była możliwa obsługa wirtualnej pamięci tymczasowo zapisywanej na dysku. Windows 3.0 stał się też dużo bardziej popularny niż jego poprzednicy. Wprawdzie gry nadal były najczęściej uruchamiane pod czystym DOS’em, lecz dla aplikacji znalazł szerokie zastosowanie, które jego następcy znacząco rozszerzyli.

Wydany w 1992 roku Windows 3.1 pozbył się trybu rzeczywistego zrywając kompatybilność z aplikacjami trybu rzeczywistego. Potrzebny był więc minimum procesor 286 z przynajmniej 1 MB RAM. W trybie rozszerzonym poprawiono integracje DOS z Windows – aplikacje DOS uruchomione w okienku mogły być też obsługiwane za pomocą myszki (o ile ją wspierały), a w niektórych aplikacjach (np. Word) stało się możliwe używanie schowka Windows. Ikony mogły być też przeciąganie i upuszczane, co pozwoliło także na operacje typu przeciągnięcie ikony dokumentu na ikonę Menedżera drukowania w celu jego wydrukowania na domyślnej drukarce. W trybie rozszerzonym dostępny był też 32 bitowy sterownik dostępu do dysku, zastępujący używane wcześniej 16 bitowe funkcje udostępniane przez BIOS. Dzięki temu Windows nie musiał już odwoływać się do trybu rzeczywistego. Teoretyczny limit pamięci powiększył się do aż 4 GiB, w praktyce wynosił 256 MiB, jednak żaden proces nie był w stanie zaadresować więcej niż 16 MiB. Tutaj także po raz pierwszy pojawił się rejestr Windows, choć większość konfiguracji systemowej dalej była zapisywana w plikach ini. Pisząc o Windows 3.1 warto wspomnieć też o edycji zwanej Windows for Workgroups 3.1. Dodawała ona do systemu obsługę sieci wraz z paroma dodatkami. Kolejne edycje Windowsa z linii 3.x były już tylko poprawkami i rozszerzeniami tego, co wprowadził 3.1. Wersja 3.11 to głównie poprawki błędów, a Windows for Workgroups 3.11 porzucił „standardowy” tryb pracy wymagając obecności procesora 386, oraz wprowadził 32 bitowy dostęp do plików przez DOS lub (co było preferowane) wprowadzony w 3.1 32 bitowy sterownik dostępu do dysku. Dzięki temu wzrosła wydajność operacji I/O. Warto wspomnieć, że ta funkcja była portem z niewydanego jeszcze Windows 95. Główne API systemu było ciągle 16 bitowe (Win16), lecz pojawił się także dodatek pozwalający skorzystać z podzbioru Win32, wymagany przez niektóre aplikacje (jako przykład dostarczono grę FreeCell). Graficzne API WinG miało też zachęcać do porzucenia DOS także w dziedzinie gier (faktycznie używane przez część gier, przykładowo SimCity 2000), jednak to ostatecznie przyszło wraz z premierą Windows 95.

Windows 95 wydany w 1995 roku był kolejną ewolucją wcześniejszych rozwiązań, jeszcze śmielej wkraczając w świat 32 bitów. Od tej pory też MS-DOS przestał istnieć jako osobny produkt stając się nierozerwalną częścią Windows. W przeciwieństwie do 16 bitowego z wielozadaniowością bez wywłaszczenia Windows 3.x, 95 był 32 bitowym systemem (opartym na 16 bitowym DOS, stąd też częste określenie Win9x jako hybryda 16/32 bit) oferującym wielozadaniowość z wywłaszczeniem (preemptive multitasking). Od teraz to system decydował o przydzielaniu czasu procesora procesom, więc teoretycznie proces nie mógł już zawiesić systemu (a w praktyce wiadomo – nawet dzisiaj tak idealnie nie jest). Windows API było teraz 32 bitowe, zgodne z tym co wprowadził Windows NT. Niezbyt wygodne i intuicyjne środowisko poprzednich Windowsów zostało zastąpione przez Windows Explorer wprowadzający słynne Menu Start i elementy, które w mniej lub bardziej zmienionej formie istnieją do dzisiaj. Pojawiła się obsługa Plug and Play (zwana prześmiewczo Plug and Pray z powodu problemów jakie często powodowała) oraz VFAT, czyli rozszerzenie systemu plików FAT zmieniający nieintuicyjne nazwy DOS w formacie 8.3 do tzw. długich nazw o maksymalnej długości 255 znaków. Nie było to nowością, bo OS/2 zrobił to samo wcześniej w inny sposób, więc długie nazwy z OS/2 były niewidoczne dla Win95 i vice versa. W przeciwieństwie do Windows 3.1, 95 nie potrzebował sterowników DOS do używania na przykład myszki w aplikacjach DOS – wystarczały mu sterowniki Windows. Zależność od DOS bywa (także i dzisiaj) przedmiotem sporów czy nazwać Win95 „systemem operacyjnym” czy „nakładką na DOS”. Faktem jest, że 95 na bazuje na DOS’ie i można nawet uruchomić sam DOS bez uruchamiania Windows. Jednak po uruchomieniu nakładki maszyna wirtualna przejmuje zadania niskopoziomowe i nie odwołuje się do DOS’a bezpośrednio, który, wierząc dokumentacji, istnieje w systemie głównie dla kompatybilności wstecznej. Nawet wiele gier, które wcześniej nie pozwalały się uruchomić na Win3.x, pod 95 działały. Jednak przez bazowanie na systemie tekstowym Microsoftu, Win95 musiał wewnętrzne struktury DOS utrzymywać w synchronizacji ze swoimi przez co, nawet uruchamiając natywny 32 bitowy program, baza tworzyła odpowiednie struktury, a w przypadku braku pamięci uruchamianie programu mogło nawet nie dojść do skutku. Podobnie sytuacja wyglądała też w Windows 98 i ME, jednak sposób startu Windows został w ME zmieniony co, poza (przynajmniej teoretycznym) zwiększeniem szybkości startu, uniemożliwiło też uruchomienie komputera w trybie DOS. Istniały jednak modyfikacje przywracające tę możliwość. Swój żywot Windowsy z serii 9x zakończyły oficjalnie w 2006 roku wraz z końcem wsparcia dla 98 i ME, a nieformalnie w 2001, kiedy pojawił się ich następca – Windows XP.

Popularność 3.1 oraz 95 wraz z ubiciem DOS’a jako samodzielnego produktu wykopały OS/2 z zastosowań domowych. Od tej pory Microsoft nieprzerwanie panuje na rynku domowym oraz w świadomości ludzkiej, którzy w większości nie wyobrażają sobie obsługi komputera bez Windowsa. Budulec jakim był DOS przetrwał do roku 2001, gdy po wydaniu Windows XP użytkownicy domowi mogli wreszcie zerwać z używaniem rozbudowanych nakładek na system z lat osiemdziesiątych. Pomimo tego, że linia 9x całkiem dobrze radziła sobie w domu, to kompletnie nie nadawała się do zastosowań profesjonalnych. Tam względna stabilność nie wystarczała i potrzebne było coś lepszego. Na nieszczęście IBM Microsoft miał coś takiego.

Prawdziwie Nowa Technologia

IBM’owi nie podobała się rosnąca popularność Windows. W końcu to OS/2 miał być następcą zarówno DOS jak i Windows. Nathan Myhrvold uważał, że głównym zagrożeniem dla Microsoftu jest Unix oraz architektura RISC, które połączone w jedno mogły skutecznie zagrozić jego pozycji. Niepokój ten podzielał też Bill Gates. W 1988 roku do Microsoftu przybył Dave Cutler. Opuścił on DEC przez serię konfliktów otaczających jego prace nad nową architekturą i systemem operacyjnym. Zgodził się dołączyć do firmy Gates’a pod warunkiem sprowadzenia jego zespołu. Zlecono mu zadanie stworzenia nowego systemu, który nie byłby dręczony problemami istniejących. Microsoft wraz z IBM zdecydował o podziale prac nad OS/2 – od tej pory zamiast wspólnie pracować nad jednym, obie firmy miały pracować nad różnymi wersjami. IBM wydał wersję 1.3 OS/2 i zaczął pracę nad wersją 2.0 mającej być ewolucją już dokonanych osiągnięć. Microsoft natomiast miał pracować nad nową wersją, która miała być kompletną rewolucją. Projekt o kryptonimie NT OS/2 był tworzony z myślą o wsparciu wielu platform. Już w fazie wczesnej produkcji pisano system z myślą o wsparciu procesora Intel i860, który był, jak się później okazało, nieudaną próbą wprowadzenia do procesorów firmy nowej architektury. Nazwa kodowa procesora brzmiała „N10”, stąd też kryptonim „NT” dla nowego systemu. NT portowano też na architekturę MIPS, oraz Alpha po otrzymaniu pozwu od DEC (który oskarżył Microsoft o kradzież kodu, nad którym wcześniej pracował Cutler). Popularność Windowsa zachęciła firmę do uczynienia nowego systemu bardziej podobnym do okienek niż OS/2. Jego główne API, czyli Win32, powstało na wzór 16 bitowego API Windows 3.x odpowiednio je rozszerzając. Zamiast Presentation Manager zdecydowano się też na użycie Program Manager. Po cichu więc NT OS/2 zmieniał się w Windows NT. Aż do początku 1991 roku ani IBM, ani nikt nie wiedział o tym, w co zmienia się rewolucyjna wersja OS/2. Partner Microsoftu jednak się o tym dowiedział i w odpowiedzi natychmiastowo zerwał umowę. Nowy system korporacji Gates’a mógł więc wreszcie przestać udawać OS/2 i pokazać swe prawdziwe oblicze – czyli nową edycje Windows.

Pod wieloma względami wydany w 1993 roku Windows NT 3.1 bardzo przypominał Windows 3.1. Oba systemy miały niemal identyczny interfejs z identycznymi aplikacjami (ba, część aplikacji w NT 3.1 była po prostu skopiowana z 3.1 bez większych zmian). Mówi się jednak, że ważniejsze jest wnętrze, a tutaj zmiany były gigantyczne. Próżno było szukać w środku MS-DOS’a – pod spodem pracowało jądro NT stworzone w modelu jądra hybrydowego. Nie było to nic znanego wcześniej – było trochę podobne do systemu DEC, trochę do OS/2 a trochę do Windowsa. NT był w pełni przenośny – już na starcie zadebiutował ze wsparciem dla 3 architektur, jakimi były i386, Alpha i MIPS. System został napisany głównie w C i C++ z jak najmniejszą ilością nieprzenośnego Asemblera. W ten sposób spełnił swój pierwszy cel jakim była przenośność. Cel numer 2, czyli niezawodność, osiągnął dzięki swojej architekturze. System był podzielony na moduły odpowiednio od siebie oddzielone, dzięki czemu awaria jednego nie mogła położyć reszty. Aplikacje nie mogły już robić co chciały z systemem. Ostatni cel, czyli osobowość, umożliwiała systemowi szeroką kompatybilność z już istniejącymi systemami. Poza swoimi własnymi aplikacjami, NT mógł też uruchamiać aplikacje MS-DOS (za pomocą maszyny wirtualnej używającej oczywiście trybu wirtualnego 8086), OS/2 1.x, POSIX oraz 16 bitowych Windowsów. Koncept został zainspirowany mikrojądrem Mach, który też przenosił API systemowe do przestrzeni użytkownika umożliwiając łatwe dodawanie nowych. Poza oczywistymi rzeczami jak wielozadaniowość z wywłaszczeniem, system obsługiwał też wątki, wiele procesorów oraz obsługę wielu użytkowników. System został też zaprojektowany jako sieciowy by podważyć monopol Novella w tym sektorze rynku i radził sobie w tych zastosowaniach bardzo dobrze. Nowy system plików NTFS był lepszy pod każdym względem od przestarzałego FAT – lepiej radził sobie z awariami i obsługiwał więcej funkcjonalności. Miał też obsługę praw dostępu oraz wielu użytkowników przez nową naturę systemu. Rejestr Windows zastąpił tekstowe pliki konfiguracyjne, które pozostały w okrojonej formie dla kompatybilności. Nie było już mowy o podobnych limitach co wcześniej.

Niestety z tego bogactwa nie dane było skorzystać użytkownikom domowym. Windows NT 3.1, podobnie jak i kilka późniejszych wersji, nigdy nie miały zawojować domów. One miały swojego Windowsa, znacznie lżejszego. Miał natomiast skutecznie wygryźć konkurencję z rynków profesjonalnych, na które nadawał się idealnie. Komputer w domu? Nie do końca. Serwer, stacja robocza czy krytyczne urządzenie? Proszę bardzo. Wraz z nieco ograniczoną obsługą POSIX Microsoft zapewnił też sobie miejsce w rządowych kontraktach tego wymagających. Było dzięki temu możliwe uruchamianie narzędzi uniksowych. Z czasem jednak NT przeszedł zmiany. Wykrojono z niego obsługę API OS/2 oraz POSIX (zastępując ją Windows Services for Unix, a później Windows Subsystem for Linux), a Win32 został bardziej zintegrowany z jądrem. W wersji 4.0 przeniesiono interfejs graficzny z przestrzeni użytkownika do przestrzeni jądra zwiększając wydajność, ale pogarszając stabilność (później częściowo przeniesiono sterowniki graficzne do przestrzeni użytkownika). Od swojego początku Windows NT nie był najlżejszym systemem. NT 3.1 wymagał aż 12 MB RAM, czyli więcej niż wydany 2 lata później Windows 95. NT 4.0 nie obsługiwał nawet USB, pełnego DirectX oraz Plug and Play, które mniej lub bardziej działające obsługiwał jego odpowiednik. Do tego bywały problemy ze sterownikami (chociaż te pisane dla NT bywały stabilniejsze, głównie ze wzgląd na lepszą podstawę) - NT nie obsługiwał powszechnie używanych w 9x sterowników VxD. Do roku 2001 NT nie był więc gotowy zawojować domostw, stało się to możliwe wraz z premierą Windows XP (choć próbowano już wcześniej). Konkurencja pod postacią głównie Linuksa nieco podkopała monopol Windowsa w zastosowaniach profesjonalnych (choć Microsoft ciągle ma tam swoją silną pozycję), jednak w domu póki co jego pozycja jest niepodważalna. Windows znacznie spuchł od roku 1993 i dorobił się wielu nowości, parę też utracił (np. wsparcie dla aplikacji 16 bitowych przez brak obsługi trybu wirtualnego 8086 w trybie 64 bitowym), lecz mniej więcej zachowuje swoją tożsamość. Windows 10 chociażby dorobił się całkiem dobrego wsparcia dla aplikacji Linuksa (w drugą stronę jest niestety gorzej) zataczając w ten sposób pewne historyczne koło (w końcu NT projektowano z myślą o wsparciu różnych formatów aplikacji). Czasem mówi się o jego śmierci, lecz Windows NT dzielnie trzyma się na rynku od 1993 roku i póki co nic nie zapowiada jego śmierci.

Zakończenie

Odpowiadając na pytanie zawarte we wstępie – to zarówno kwestia kompatybilności jak i tego, do czego początkowo rozwijano okienka oparte na jądrze NT. Windowsy przeszły długą drogę by osiągnąć to co mają dzisiaj. Prawdopodobnie żaden system nie ma równie pokręconej i kłopotliwej historii co projekty, które można wrzucić do wora o nazwie „Windows”. Z dwóch podobnych wizualnie, lecz kompletnie różnych od siebie produktów został jeden, zunifikowany i mający wiele zastosowań. Zanim do tego doszło trzeba było sporo się nakombinować by nie zniszczyć kompatybilności i obchodzić ograniczenia ówczesnego sprzętu. Dzisiaj już na szczęście nie mamy aż takich problemów, poza wieloma zaawansowanymi systemami operacyjnymi rozwijanymi przez wielu deweloperów i korporacje z wypchanymi kieszeniami, pisze się też wiele hobbystycznych czy edukacyjnych (wiki i forum osdev jest tego przykładem). Dzięki technice wirtualizacji czy emulacji łatwiej jest też dbać o działanie starego oprogramowania. I o ile dzisiejsze systemy operacyjne są o wiele bardziej skomplikowane niż ich dawne odpowiedniki, o tyle dzisiaj dużo mniej muszą się martwić o limity sprzętowe. W końcu kto dzisiaj (w innym celu niż hobby) pisze system operacyjny w Asemblerze martwiąc się o zmieszczenie się w pamięci wielokrotnie mniejszej, niż zajmuje dzisiejszy pierwszy lepszy kalkulator?

Źródła grafik

PC-DOS

OS/2

Windows 1.0

Windows 2.1

Windows 3.0

Windows 3.1

Windows 95

Windows NT 3.1

Windows 10

Logo