To jak podróż w czasie: współczesny program uruchomiony na Windows 3.11

To jak podróż w czasie: współczesny program uruchomiony na Windows 3.11

To jak podróż w czasie: współczesny program uruchomiony na Windows 3.11

Pamiętacie czasy, kiedy Microsoft tworzył rozwiązania zamknięte, niekompatybilne z innym, a nawet własnym ekosystemem, i zależne od systemu operacyjnego? Ja też.

Jednak od ponad 10 lat coś zaczęło się zmieniać i dziś „programowanie w .NET” oznacza pisanie programów, które uruchomimy na Makach, Linuksie, w Dockerze, bez potrzeby spełniania zależności od serwera czy systemu operacyjnego.

Michal Strehowsky to jeden z inżynierów Microsoftu pracujących nad .NET CoreRT, czyli nad środowiskiem uruchomieniowym, które jest wysoce zoptymalizowane dzięki natywnej kompilacji i zastosowaniu rozwiązań typu Ahead of Time Compilation. Często ilustruje możliwości bibliotek, nad którymi pracuje: na przykład kiedyś stworzył grę w węża, zajmującą osiem kilobajtów po skompilowaniu, którą można uruchomić na szeregu systemów operacyjnych, łącznie z Linuksem i DOS. Wszystko dzięki kompilacji natywnej.

Program w C# uruchomiony na Windows 3.11

Jednym z pomysłów Strehovskiego była (udana) próba uruchomienia programu napisanego w C# na Windows 3.11.

Windows 3.11 to środowisko uruchomieniowe i graficzna nakładka na DOS wydana w 1993 r. Nie można go uznać za pełny system operacyjny, ale miał wiele jego cech. Początkowo było to środowisko 16-bitowe, ale w pewnym momencie, dzięki aktualizacji, zyskało możliwość ograniczonego korzystania z programów i adresowania 32-bitowego. API to miało nazwę Win32s i pochodziło z „pełnego” systemu operacyjnego Microsoftu Windows NT.

Do tego nie jest to program konsolowy (uruchamiany w trybie tekstowym), ale „okienkowy”, czyli korzystający ze środowiska graficznego.

W jaki sposób Strehovski tego dokonał?

Jak sam przyznaje, wykorzystał swoje doświadczenia z budowania „ośmiokilobajtowego” węża. Po skompilowaniu prostego kodu do natywnego obrazu musiał rozwiązać zależności, których nie miał Windows 3.11 (biblioteki, potrzebne do uruchomienia programu, niezawarte w nim, a zawarte dziś w systemie operacyjnym).

Współczesne środowisko .NET nie produkuje odpowiednich plików wynikowych, rola współczesnego kompilatora musiała się więc zakończyć na stworzeniu pliku obiektowego, który następnie został skonsolidowany za pomocą tzw. linkera dostarczonego z Visual C++ 2.0, wydanego w 1994 r.

Istnieje zdanie przypisywane Newtonowi, które przypomina mi się przy tej okazji: „jeśli widzę dalej, to tylko dlatego, że stoję na ramionach olbrzymów”. Wszystkie ludzkie osiągnięcia są kontynuacją innych i każdy czerpie z osiągnięć tych, którzy byli przed nim. Dzięki temu, że podstawy komputeryzacji, programowania i internetu wciąż gdzieś tam są zawarte w naszych komputerach, możliwa jest taka „podróż w czasie”, jak ta pokazana przez pracownika Microsoftu.

Dołącz do dyskusji