05/03/2013

Jak przerażający może być „oldskulowy” programista?

Informacje

Jewgienij Kasperski na swoim blogu zamieścił jakiś czas temu artykuł o wielkim powrocie twórców wirusów ze starej szkoły. Mój wiek pozwala mi pamiętać tych ludzi i ich genialne prace – i niekoniecznie mam tutaj na myśli twórców złośliwego oprogramowania. Mówię o programistach, koderach i mistrzach asemblera. Byli jak rycerze Jedi i mroczni lordowie Sith ze Starego Imperium, których wszystkie powieści, skoncentrowane wokół postaci Skywalkera, uznają za jeszcze potężniejszych, kiedy dzierżą w swych rękach miecze świetlne (nie żartuję, zapytajcie Yodę). I pomyślałem… „cholera… są chyba tylko ze trzy żywe osoby, które były świadkami prawdziwej mocy tych ludzi” (ja, Jewgienij Kasperski i Bill Gates). A tak na poważnie – dość trudno jest zrozumieć, co potrafi i do czego jest zdolny haker ze starej szkoły – dlatego postanowiłem przybliżyć Wam to, o czym pisał Jewgienij na swoim blogu, abyście mogli sami wyrobić sobie zdanie, czy były to przerażające wieści, czy nie.

09_oldchool_programmer_01

Ekstremalne ćwiczenie dla głupich kalkulatorów

W roku 1992 komputery były w zasadzie inteligentnymi kalkulatorami z dużymi ekranami (to nie jest żart, dzieciaki!). Ale było kilka grup entuzjastów, którzy bardzo chętnie stawiali czoła wyzwaniom oprogramowania: niektórzy programiści byli w stanie tworzyć kod, który używał każdego bajta pamięci, każdej funkcji procesora i rejestru, każdego polecenia systemu operacyjnego i, co najważniejsze, 100% mocy sprzętu – ci ludzie „wyciskali komputery do ostatniej kropli” i chwalili się swoimi osiągnięciami. Muszę podkreślić, że aby naprawdę ogarnąć te zadania, trzeba być niesamowicie twórczym, pić dużo kawy i mieć IQ na szalenie wysokim poziomie. Ruch koderski rozpoczął się gdzieś w roku 1988, w zasadzie wraz z rozpowszechnieniem się pierwszej wersji MS-DOSa. Ruch nie miał oficjalnej nazwy, ale zgodnie z prawem ewolucji, prędzej czy później jego uczestnicy musieli zacząć konkurować ze sobą. Tak w roku 1992 narodziła się demoscena „Assembly”.

„Future Crew” wraca z przyszłości

W 1992 r. skandynawska grupa koderska „Future Crew” wraz ze swoimi przyjaciółmi z grup programistycznych „Complex” i „Amiga”, zorganizowała event zwany „The Assembly”, który powstał w celu swobodnej wymiany doświadczenia i chwalenia się swoimi pracami w języku asemblera oraz rywalizacji o miano najlepszego kodera roku. Było kilka dyscyplin, ale dwoma najbardziej interesującymi były: dema platformowe (PC, Amiga, C64) oraz konkurencja PC 64k. Pierwsza miała na celu zademonstrowanie najbardziej eleganckich rozwiązań kodowania / najlepszych możliwości sprzętu z użyciem najbardziej minimalistycznego i zoptymalizowanego kodu. Druga dyscyplina była dość trudna – koderzy byli ograniczeni do 64 KB wolnej przestrzeni – ich skompilowane programy nie mogły zajmować więcej niż 64 kilobajty pamięci – dlatego ta nominacja okazała się konkursem w kategorii „elegancji kodowania”.

Demo jest w zasadzie oskryptowaną serią zdarzeń, zaprogramowanych w celu wykazania możliwości sprzętu lub/i najlepszych rozwiązań programistycznych dla określonego zadania, np. skomplikowanych obliczeń z dziedziny fizyki.”

W roku 1992 grupa „Future Crew” zwyciężyła w konkursie dzięki swojemu demu zatytułowanemu „Unreal”. Zamieszczamy to demo poniżej (miejcie na uwadze, że jest rok 1992, a system Windows nie jest rozpowszechniony). Demo zostało nazwane „Unreal” (ang. „Nierzeczywiste”) nie bez powodu – nikt wcześniej nie zrobił, ani nie widział czegoś takiego:

Grupa „Future Crew” jako pierwsza zademonstrowała w pełni działający model środowiska 3D – wraz z warstwą graficzną, skomplikowanymi obliczeniami fizycznymi, cieniowaniem itd. Cały kod kompilacji zajmował około jednego megabajta (razem z muzyką! – i podkreślam raz jeszcze, że jest rok 1992 i nikt nie słyszał o czymś takim, jak kompresja MP3). Jedynym sposobem na osiągnięcie takiego rezultatu było perfekcyjne opanowanie asemblera – moim zdaniem najbardziej skomplikowanego języka programowania, jaki kiedykolwiek powstał. Abyście mieli jakieś pojęcie o tym, czym jest kodowanie w asemblerze, przytoczę to, co powiedzieli mi kiedyś ludzie z „Future Crew”:

Nauczenie się kodowania dem jest długim i bardzo skomplikowanym procesem. Potrzeba lat, aby nauczyć się bardzo dobrze kodować dema. Dobrym sposobem na początek przygody jest znajomość jakiegoś języka wysokiego poziomu, jak np. Pascal lub C, a następnie rozpoczęcie eksperymentowania z asemblerem. Eksperymenty i stawanie się coraz lepszym zajmuje masę czasu i nie ma tutaj drogi na skróty. Najważniejsze jest to, aby postarać się zrozumieć, co się robi w danej chwili, następnie spróbować zmienić program, aby zobaczyć, co się dostanie na wyjściu, a z całego eksperymentu nabyć mądrość, w jaki sposób należy robić tę rzecz, a w jaki inną. Nauka kodu wymaga dużo cierpliwości, masy entuzjazmu i mnóstwa czasu. Nie jest to prosta sprawa.”

Zasadniczo ci, którzy brali udział w konkursie, okazali się być niewyczerpanym źródłem inspiracji dla wszystkich programistów. Nie mówię tutaj o tym, że ktoś kradł ich pomysły. Nie – każdy tylko… adaptował ich kreatywną wizję. Większość produktów, które otaczają nas dzisiaj – wszystkie gry komputerowe, produkty graficzne i wideo firmy Adobe, nawigacje i GPSy, Google Earth… wszystkie te, warte miliardy dolarów rozwiązania w pewnym sensie zainspirowane zostały przez demoscenę „Assembly”.

09_oldchool_programmer_02

1993 – rok „Second Reality” i „Eclipse”

Pierwsze „Assembly” okazało się takim sukcesem, że w kolejnym roku liczba uczestników i prezentowanych dem wzrosła dwukrotnie (ten trend był w zasadzie stały, a w roku 1999 „Assembly” odbyło się na płycie największego stadionu futbolowego w Helsinkach (Finlandia) i zgromadziło ponad 5000 uczestników z całego globu). W 1993 r. grupa „Future Crew” zaprezentowała coś… fantastycznego. Coś, co ustawiło bardzo wysoko poprzeczkę jakości we wszystkich kolejnych konkursach i na zawsze zmieniło świat programowania – demo o nazwie „Second Reality” (ang. „Druga rzeczywistość”):

Istotne jest, aby zrozumieć, że to demo powstało ZANIM firma Intel zaprezentowała procesory Pentium (Intel zaprezentował swoje procesory 22 marca 1993 r., a pierwsze komputery PC z procesorami Pentium pojawiły się w roku 1994, natomiast „Assembly” miało miejsce w miesiącach lipiec / sierpień 1993 r. Oznacza to, że „Future Crew” pokazała swoją pracę przynajmniej pół roku przed pojawieniem się komputerów z architekturą Pentium). A to znaczy, że cała ta śliczna grafika i efekty dźwiękowe były dostępne na komputerach z procesorami x486, z prymitywnymi kartami dźwiękowymi (pierwsze sound blastery!) i BEZ kart graficznych. To demo dosłownie „wystrzeliło w kosmos” członków jury i całą społeczność koderską – pokazywało dokładnie, jakie efekty można osiągnąć posiadając ekspercką wiedzę o asemblerze, połączoną z minimalistycznym podejściem koderskim (skompilowany kod „Second Reality” zajmował około 1,5 megabajta). Tego roku ekipa „Future Crew” stała się NAPRAWDĘ sławna.

Poniższy materiał to zapis wideo pracy „za kulisami” – ekipa „Future Crew” podczas pracy nad demem „Second Reality”:

Making of Second Reality / Future Crew

Kolejnym symbolicznym zwycięstwem asemblera z roku 1993 było demo „Eclipse” grupy „EMF”. Ten kod był numerem 1 w kategorii do 64 kilobajtów:

To wszystko można zrobić w asemblerze w obrębie 64 KB – obejmuje to grafikę, muzykę, efekty warstw i przejścia, tekst i przewijane menu.

W 1994 r. demo „Verses” (grupy „EMC”) zdobyło pierwszą nagrodę w kategorii dem platformowych.

Zasadniczo, grupa „EMC” pokazała światu, że obliczenia fizyki realistycznej powierzchni wody można zrobić w okamgnieniu, a morfing obiektów 3D, w ramach limitu prędkości oferowanej przez klasę Pentium, jest jak bułka z masłem:

Kolejny zwycięzca w kategorii PC 64k – demo „Airframe” grupy „Prime” jest zarazem matką i ojcem wszystkich nowoczesnych symulatorów 3D lotnictwa i przestrzeni powietrznej:

Airframe – Prime (1994)


Aby mieć pojęcie o tym, jak szybko ewoluował kod, poniżej zamieszczamy zwycięskie prace od roku 1995 do roku 2012.

Zwycięzca „Assembly” w roku 1995: demo „Stars” grupy NoooN

Stars – Wonders of the World by Noon (MS DOS P…

Zwycięzca „Assembly” w roku 1996: demo „Machines of Madness” grupy Dubius

Machines of Madness by Dubius PC (1996)

Zwycięzca „Assembly” w roku 1997: demo „Boost” grupy Doomsday

Boost by Doomsday (1997) PC demo

Zwycięzca „Assembly” w roku 1998: demo „Gateways” grupy Trauma


Przy okazji – jest to przodek World of Warcraft, jeżeli chodzi o realizację wizualną. To wtedy zaczęto tworzyć wizualizacje 3D gier MMORPG.

W roku 1999 technologia 3DFX na zawsze zmieniła świat grafiki, a demo grupy MatureFurk, zwane „Virhe”, rzuciło wszystkich na kolana:

Modernizacja „Assembly”

W roku 2000 reguły gry trochę się zmieniły – zamiast współzawodnictwa w trzech kategoriach – Amiga, PC i C64 – rozpoczęto konkurencję w kategoriach „Combined Demo” („demo łączone”), „Oldschool Demo” („demo oldskulowe”) i „64kb Limit Intro” („64-kilobajtowe intro”). Kategoria PC 64k wypadła z obiegu w roku 2010. Jednakże, na końcu tego artykułu możecie znaleźć kilka fantastycznych przykładów tego, co profesjonalny koder może zrobić w asemblerze, dysponując jedynie 64 kilobajtami wolnej przestrzeni. Poniżej lista zwycięzców w kategorii „Combined Demo”, która jest wybitnym dowodem na mistrzostwo znajomości asemblera:

Zwycięzca „Assembly” w roku 2000: demo „Spot” grupy „Exceed”

Spot – Exceed

Zwróćcie uwagę na efekty oświetlenia… są niewiarygodne – zważając na to, że są to technologie sprzed trzynastu lat!

Zwycięzca „Assembly” w roku 2001: demo „Lapsuus” grupy „MatureFurk”

Zwycięzca „Assembly” w roku 2002: demo „Liquid… Wen?” grupy „Haujobb”

Liquid… Wen? by Haujobb (720p HQ demoscene demo)

Należy wyraźnie podkreślić fakt, że wszystkie grafiki (łącznie z wyrazistymi twarzami postaci) w demach zgłoszonych na „Assembly” były rysowane WYŁĄCZNIE z użyciem kodu – to nie są pliki obrazów wstawione w demo! Taka „fuszerka” nie miała racji bytu! 🙂

Zwycięzcą „Assembly” w roku 2003 zostało demo „Legomania” grupy „Doomsday”. To wielki ukłon w stronę WSZYSTKICH konsolowych gier 3D – i jestem prawie pewien, że był to czas, kiedy pojawiła się wizja „nowego dziecka Nintendo”, czyli konsoli Wii:

Doomsday – Legomania

Zwycięzca „Assembly” w roku 2004: demo „Obsoleet” grupy „Unreal Voodoo”

Obsoleet by Unreal Voodoo (2004)

Zwycięzca „Assembly” w roku 2005: demo „Iconoclast” grupy „ASD”

W roku 2006 demo „Starstuck” grupy „Black Lotus” po raz kolejny rzuciło społeczność koderów na kolana, głównie z powodu wyrafinowanego kodowania grafiki. Zaryzykuję stwierdzenie, że poprzeczka konkursu została w tym momencie znacznie podniesiona:

Starstruck Party Version – TBL (The Black Lotus)

Zwycięzca „Assembly” w roku 2007: demo „LifeForce” grupy „ASD”. Oczywiście było to arcydzieło stworzone w asemblerze:

Zwycięzca „Assembly” w roku 2008: demo „Within Epsilon” grupy „Pyrotech”


Zwycięska praca z roku 2009 jest jedną z moich ulubionych – demo „Frameranger” grup „Fairlight”, „CNCD” i „Orange”:

Frameranger by CNCD Fairlight Orange

W 2010 r. demo „Happiness is right around the bend” grupy „ASD” pokazało fantastyczny czołg 🙂

Happiness is around the bend by Andromeda Softw…

Zwycięzca „Assembly” w roku 2011: demo „Spin” grupy „ASD”:

Spin – ASD

Praca z roku 2012 była fenomenalna – demo „Spacecut” grup „Carillon”, „Cyberiad” i „CNCD”:

Spacecut – Carillon & Cyberiad CNCD (RECAP) | A…


Przykłady najlepszych prac w kategorii do 64 kilobajtów

Aby mieć pojęcie, co doświadczony programista potrafi „upchnąć” na 64 kilobajtach wolnej przestrzeni: oto najlepsza praca z 2005 r. – demo „Che Guevara” grupy „Fairlight”

Przypominam – to są 64 kilobajty kodu asemblera. I ani bajta więcej!

Ale 3 lata później, w roku 2008, ta sama grupa zademonstrowała ogromny postęp technologiczny i w 64 kilobajtach zdołała zmieścić demo „Panic room” – zdobywając jednocześnie pierwszą nagrodę w kategorii PC 64k:

panic room by Fairlight

Ale NAJLEPSZYM demem w kategorii PC 64k, jakie KIEDYKOLWIEK zostało zaprezentowane, była praca „X marks the spot” grupy „Portal Process” – zwycięzca w kategorii PC 64k konkursu „Assembly” z roku 2010:

X Marks The Spot by Portal Process | 64k (FullH…

A teraz pozwólcie, że naszkicuję tu mały obrazek… Wszystkie te dema, zwłaszcza te o rozmiarze 64 KB, pokazują, co utalentowany programista starej szkoły jest w stanie wykreować, jeżeli tylko o tym pomyśli. A może zrobić wszystko, zwłaszcza, jeśli jest mistrzem asemblera – języka, który nie jest popularny we współczesnych czasach, w których większość produktów jest tworzona z wykorzystaniem „wysokopoziomowych” języków programowania, takich jak Visual C i Object C.

Wyobraźmy sobie teraz przez chwilę sytuację, w której utalentowany programista asemblera, lub cała grupa programistów pokroju „Future Crew” decyduje się na porzucenie kreacji graficznych 3D, muzyki, fizyki itd. i cały swój entuzjazm, całą swoją pasję kieruje w jedną stronę – tworząc mały kod, który jest w stanie kraść Wasze pieniądze, albo np. przeprogramować reaktor jądrowy. Jak myślicie, czy im się powiedzie? Jak długi będzie to kod, skoro 64 kilobajty to dużo więcej niż potrzeba? Czy dadzą radę obejść zintegrowane zabezpieczenia systemów operacyjnych z rodziny Windows lub tych produkowanych przez firmę Apple? Czy są mobilni? Czy są elastyczni? Czy mają pieniądze, żeby to zrobić, skoro od 20 lat organizują darmową imprezę dla 5000 uczestników?

Nie podam Wam odpowiedzi. Sami musicie zdecydować. Kiedy słyszę, jak ktoś rzuca hasło w stylu – „mój PeCet nie potrzebuje ochrony” – nie mogę nic zrobić, jak tylko załamać ręce i przypomnieć sobie „Second Reality”. Całe szczęście, że ludzie, którzy kiedyś tworzyli „Future Crew” są teraz bardzo zajęci 🙂 – jeśli jesteś najlepszy w kodowaniu dema, to dlaczego nie zrobić z tego sposobu na własny biznes, prawda? Następnym razem, gdy na swoim komputerze uruchomisz 3DMarka – pomyśl o „Unrealu”, „Second Reality” i grupie „Future Crew”. „Future Crew” jako zespół nie opublikował już nic po „Scream Trackerze 3” (grudzień 1994 r.). Mimo, że grupa nigdy nie została oficjalnie rozwiązana, drogi jej członków rozdzieliły się w drugiej połowie lat 90 ubiegłego stulecia. Firmy takie jak Futuremark (3DMark), Remedy (Death Rally, Max Payne, Alan Wake), Bugbear Entertainment (FlatOut, Glimmerati, Rally Trophy), Bitboys (firma zajmująca się sprzętem do grafiki) i Recoil Games (Rochard) zostały w całości lub w części założone przez ludzi z „Future Crew”.

Chciałbym im wszystkim podziękować – to oni zmienili świat na zawsze i pokazali nam, że wszystko jest możliwe, jeśli poświęcisz temu swój umysł. Jesteś nawet w stanie stworzyć Kaspersky Internet Security. Dzięki za inspirację chłopaki! A w głębi duszy mam nadzieję, że ani jeden programista, który był częścią społeczności „Assembly” nigdy nie użył i nie użyje swoich umiejętności do złych celów.