STEAM - co z wersją dla Linuksa?
11.02.2011 | aktual.: 14.02.2011 12:39
Witam, postaram się nie rozpisać za bardzo (wiem, że nie każdy lubi zbyt długie teksty), a jednocześnie opowiedzieć jak to było z tym STEAMem dla Linuksa.
Oferta pracy
Wszystko zaczęło się od oferty pracy na stanowisko Senior Software Engineer w którym jednym z zadań było tworzenie Linuksowego portu gier napisanych dla Windows.
Link do oferty: http://www.valvesoftware.com/job-SenSoftEngineer.html
Archiwalnie zrzut ekranu: http://img145.imageshack.us/img145/3649/valvesoftwareengineer.png
Pojawiło się pełno teorii jako, że Valve Software zamierza wydać oficjalnego klienta jednej z największych platform do grania - STEAM.
Przeportowanie STEAM dla MacOSX
MacOSX tak samo jak systemy oparte o Linuksa używają X11 oraz OpenGL dlatego sprawa z tymi dwoma rzeczami już jest załatwiona, co jeszcze stanęło na drodze portu dla Linuksa?
Oto lista podobieństw oraz głównych różnic tych dwóch systemów:
- Inna biblioteka graficzna (GTK/QT dla Linuksa, "Cocoa/Carbon?" dla MacOSX) - Inne jądro - Inny domyślny podsystem graficzny w MacOSX + Ten sam podsystem wyświetlania grafiki 3D, mowa o OpenGL + Obydwa systemy są Uniksopodobne, podobne założenia, "wszystko jest plikiem" + To samo środowisko skryptowe czyli bash jako domyślna powłoka stąd jeden launcher dla dwóch systemów
Jednym z ważnych dowodów na to, że Valve "po cichu" tworzy klienta dla Linuksa był kod skryptu uruchamiającego STEAM dla MacOSX napisany w bashu.
#!/bin/bash # figure out the absolute path to the script being run a bit # non-obvious, the ${0%/*} pulls the path out of $0, cd's into the # specified directory, then uses $PWD to figure out where that # directory lives - and all this in a subshell, so we don't affect # $PWD STEAMROOT=$(cd "${0%/*}" && echo $PWD) #determine platform UNAME=`uname` if [ "$UNAME" == "Darwin" ]; then PLATFORM=osx32 # prepend our lib path to LD_LIBRARY_PATH export DYLD_LIBRARY_PATH="${STEAMROOT}"/${PLATFORM}:$DYLD_LIBRARY_PATH elif [ "$UNAME" == "Linux" ]; then PLATFORM=linux32 # prepend our lib path to LD_LIBRARY_PATH export LD_LIBRARY_PATH="${STEAMROOT}"/${PLATFORM}:$LD_LIBRARY_PATH fi if [ -z $STEAMEXE ]; then STEAMEXE=steam fi ulimit -n 2048 # and launch steam cd "$STEAMROOT" STATUS=42 while [ $STATUS -eq 42 ]; do ${DEBUGGER} "${STEAMROOT}"/${PLATFORM}/${STEAMEXE} $@ STATUS=$? # are we running osx? if [ $STATUS -eq 42 -a ${PLATFORM} == "osx32" -a -f Info.plist ]; then # are we running from in a bundle? exec open "${STEAMROOT}"/../.. fi done exit $STATUS
Powyższy kod jest jednoznacznym dowodem na to, że STEAM był testowany pod Linuksem a także, że Linux jest platformą wpisaną w planach tak jak MacOSX.
Wczesne wersje plików binarnych skompilowanych dla Linuksa
Przez bardzo krótki okres czasu były publicznie dostępne pliki binarne klienta STEAM dla Linuksa pod tym adresem, sam zdążyłem je pobrać pamiętam, że miałem te pliki na pendrive lecz aktualnie już ich nie posiadam dlatego nie jestem w stanie udostępnić ;‑)
Wyjście w konsoli klienta STEAM:
yjwong@yjwong-laptop:~/Documents/steam$ ./steam.sh [ 0%] !!! Fatal Error: Failed to determine download location for universe 0 [----] Verifying installation... [ 0%] Downloading Update... [ 0%] !!! Fatal Error: Failed to determine download location for universe 0 unlinked 0 orphaned pipes CellID: Fetching server list from CSDS. . . CellID: CSDS returned 168 servers. CellID: Connecting to 62.118.240.140:27031. . . CellID: Connect to 62.118.240.140:27031 took 524 MS CellID: New Best! CellID: Connecting to 209.197.6.226:27031. . . Shutting down. . . CellID: Connect to 209.197.6.226:27031 took 326 MS CellID: New Best! CellID: Connecting to 203.77.185.186:27031. . . CellID: Connect to 203.77.185.186:27031 took 286 MS CellID: New Best! CellID: Connecting to 69.28.153.109:27031. . . CellID: Connect to 69.28.153.109:27031 took 380 MS CellID: Connecting to 79.141.161.2:27031. . . CellID: exiting! unlinked 2 orphaned pipes CAsyncIOManager: 0 threads terminating. 0 reads, 0 writes, 0 deferrals. CAsyncIOManager: 1657 single object sleeps, 0 multi object sleeps CAsyncIOManager: 0 single object alertable sleeps, 1 multi object alertable sleeps yjwong@yjwong-laptop:~/Documents/steam$
Warto zauważyć, że na wyjściu z konsoli nie ma charakterystycznych dla Wine wpisów.
Lecz abyście Mi uwierzyli pokażę zrzuty ekranu czy nawet film wideo w którym widać proces uruchamiania STEAM dla Linuksa.
@edycja 14.02.2011: Dodaję także kilka ważniejszych zrzutów ekranu które pominąłem: Główne okno STEAM Okno nowości Wbudowany czat
Źródła: http://www.phoronix.com/scan.php?page=news_item&px=ODIzMA http://www.phoronix.com/scan.php?page=news_item&px=ODIyOQ
http://www.youtube.com/watch?v=VPWEX23osn0
Drukowalne ciągi znaków odnalezione w kliencie beta dla MacOSX
Przy pomocy narzędzia strings odnaleziono ciągi "Linux" w becie klienta dla MacOSX:
ReadToken overflow WIN32 VISTA WIN7 POSIX LINUX X360 Assertion Failed: kv windows macos linux unknown macos104 macos1058 macos106 linux22 linux24 linux26
Co oznacza, że zapewne w kodzie znajdują się pewnego rodzaju instrukcje być może dla kompilatora pokazujące który kod jest przeznaczony dla jakiego systemu(mało prawdopodobne?) bądź dla statystyk popularności danego systemu wśród użytkowników STEAM.
Odnośnie windowsowej wersji klienta nie znaleziono już tego co pod MacOSX, wyniki bardziej wskazują na hlds, lecz jest jedna wzmianka o kliencie:
webnull@webnull-gentoo-desktop /media/Disk/Gry/STEAM $ strings Steam.exe |grep ux 9uxr uxWP ux9u f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\auxdata.cpp german-luxembourg french-luxembourg Bad eCurrentLinuxClientVersion field in CClientConfigRecord Bad eCurrentLinuxHldsUpdateToolVersion field in CClientConfigRecord Bad eBetaLinuxHldsUpdateToolVersion field in CClientConfigRecord Empty eBetaLinuxHldsUpdateToolPassword in CClientConfigRecord Luxembourg uxyKNOGJKHKK|
Z tego co widać, że jest wersja klienta Linuksowego (STEAM?) oraz wersja klienta Linuksowego serwera dedykowanego (HLDS - bądź jego aktualizatora?).
Gry w sklepie STEAM dostępne dla platformy Linux
W sklepie STEAM pojawiły się gry które w minimalnych wymaganiach sprzętowych miały podanego Linuksa obok Windowsa i MacOSX - a to dziwne, Valve nie dopuściło by czegoś takiego skoro STEAM nie byłby dla Linuksa przecież nie można okłamywać potencjalnych klientów.
Oficjalna informacja od producenta
There's no Linux version that we're working on right now.
to słowa wypowiedziane przez przedstawiciela Valve Douga Lombardiego, oznaczają one, że nie ma aktualnie w planie żadnej wersji STEAM dla Linuksa nad którą by teraz Valve pracowało.
Oczywiście publiczna wypowiedź przedstawiciela Valve nie oznacza, że klienta Linuksowego nie ma w planach.
Osobiście jestem przekonany, że Valve przynajmniej zamierzało wydać klienta STEAM dla Linuksa - czym może być spowodowana nagła zmiana?
Może Valve specjalnie skłamało aby pozytywnie zaskoczyć społeczność?
Co jeżeli ktoś podłożył te wszystkie dowody? (najmniej prawdopodobne - pliki klienta były dostępne na serwerach oficjalnych platformy STEAM, sam pobrałem te pliki kiedyś - szkoda, że do dziś ich nie posiadam).
Pamiętam kiedyś jak pobierałem pliki binarne klienta Linuksowego to dostępne były także pliki binarne klienta Windowsowego i tego dla MacOSX.
Przykładem dawniej to było: http://store.steampowered.com/public/client/steam_client_linux # 403 (zablokowano) http://store.steampowered.com/public/client/steam_client_windows # 404 (brak) http://store.steampowered.com/public/client/steam_client_macosx # 404 (brak)
Dziwnym trafem akurat katalog steam_client_linux zablokowano, a pozostałe nie istnieją - zostały skasowane. Jakby Valve coś ukrywało w tym jednym katalogu.
@edycja - 12.02.2011 Być może to nie były plotki, a większa firma jak Microsoft opłaciła wycofanie się Valve z tworzenia klienta dla konkurencyjnego systemu operacyjnego?
To jest całkowicie możliwe ponieważ natywny klient mógłby spowodować nagły wzrost popularności Linuksa, bardzo znaczący wzrost...
Zapraszam do udziału w dyskusji na temat STEAMa.