Jeden rozmiar nie pasuje do wszystkich, dlaczego oprogramowanie nie jest powszechnie kompatybilne

  • Michael Cain
  • 0
  • 3425
  • 829
Reklama

Właśnie pobrałeś aktualizację do swojej ulubionej aplikacji typu open source. Wszystko działa dobrze i używasz go na innych urządzeniach - więc nadszedł czas, aby wdrożyć go również na te.

Tyle że twój błyszczący nowy laptop z Linuksem nie jest kompatybilny z twoim pakietem instalacyjnym Windows. Co powiesz na swój tablet z Androidem? iPhone? PS4? Dlaczego nie możesz po prostu wziąć tego oprogramowania i używać go w dowolnym miejscu? Zbadajmy różne bariery dla marzeń “kup raz, biegnij gdziekolwiek.”

Rozwój oprogramowania i architektura systemu operacyjnego

Zrozumienie, dlaczego oprogramowanie nie działa w różnych systemach operacyjnych, wymaga trochę (tylko trochę, obiecuję) wiedzy na temat tworzenia oprogramowania.

Proces tworzenia oprogramowania

W bardzo podstawowym procesie tworzenia oprogramowania dla komputerów stacjonarnych, serwerów i urządzeń mobilnych (tj. Nie programowanie w sieci a programowanie w sieci: jaka jest różnica? Programowanie a programowanie w sieci: jaka jest różnica? Można by pomyśleć, że programiści aplikacji i programiści wykonują tę samą pracę , ale jest to dalekie od prawdy. Oto kluczowe różnice między programistami a programistami.), programista:

  1. Wpisz trochę kod do jednego lub więcej plików.
  2. Skompilować kod w coś, co komputer może wykonać.
  3. Test aby upewnić się, że program działa zgodnie z oczekiwaniami.
  4. Pakuj i dystrybuuj / wdrażaj oprogramowanie.

Jest to połączenie pierwszego i drugiego kroku, które nas tutaj dotyczą. Proces kompilacja oprogramowanie lub przekształcenie go z kodu w jedynki i zera zrozumiałe dla komputera (język maszynowy) jest złożone. Nie zajmiemy się tym szczegółowo, ale dobrze jest zrozumieć na wysokim poziomie, co się dzieje.

Architektura systemu operacyjnego

Ważną sprawą do zrozumienia jest to, że system operacyjny nie jest pojedynczą jednostką. Raczej składa się z warstw oprogramowania.

Jądra systemu operacyjnego

System operacyjny jądro odpowiada za komunikację ze sprzętem komputera. Oprogramowanie przekazuje swoje polecenia do jądra, które z kolei wydaje polecenia sprzętowe (na przykład), aby odczytać plik z dysku twardego lub narysować okno na ekranie. Zasadniczo koordynuje wszystkie informacje (niezależnie od tego, czy są to przechowywane dane, obliczenia lub dane wejściowe użytkownika) między sprzętem i różnymi programami. Jądro udostępnia wszystkie te funkcje oprogramowaniu za pośrednictwem wywołania systemowe.

Źródło zdjęcia: Wikimedia Commons

Jądro każdego systemu operacyjnego będzie implementowało wywołania systemowe w różny sposób, w zależności od tego, które są dostępne, jak się je nazywa lub jakie opcje wybierają. W rezultacie oprogramowanie musi uwzględniać wywołania systemowe obsługiwane przez jądro każdego systemu operacyjnego, na który jest kierowany. Wywołanie systemowe, którego używasz do wysyłania danych do GPU w systemie Linux, może mieć inną nazwę, listę informacji, które musisz podać, lub obie w systemie Windows. To dokładne połączenie może nawet nie być dostępne.

Biblioteki systemowe

W wielu przypadkach oprogramowanie nie dzwoni bezpośrednio do jądra. Zamiast tego wzywa biblioteki systemowe, lub zbiory podstawowych funkcji. Istnieją biblioteki, więc (na przykład) każdy program, który zapisuje pliki na dysku twardym, nie musi do tego pisać funkcji. Zamiast tego po prostu linki do biblioteka systemowa i korzysta z istniejącej funkcji. Biblioteka GLibC dla systemu Linux jest doskonałym przykładem, podobnie jak pliki .DLL w Win32 API lub zawartość katalogu Mac / System / Library Maca Jak uzyskać dostęp do folderu biblioteki OS X i dlaczego jest to wygodne Jak uzyskać dostęp do biblioteki OS X Folder i dlaczego jest przydatny Większość folderów biblioteki OS X najlepiej zostawić w spokoju, ale dobrze jest poznać swoją drogę w Bibliotece użytkownika i jej okolicach. .

Źródło zdjęcia: ScottXW za pośrednictwem Wikimedia Commons

Biblioteki systemowe działają jako rodzaj translatora między aplikacjami a jądrem dla rutynowych zadań. Aplikacje tworzą wywołania funkcji do tych bibliotek, które obsługują wiele szczegółów niskiego poziomu. Mogą również dla wygody wykonywać wywołania systemowe do jądra. Jak można się domyślać, oznacza to, że biblioteki te są napisane dla konkretnego jądra, a zatem nie można ich używać w systemach operacyjnych z różnymi jądrami.

Nagłówki wykonania systemu operacyjnego

Ostatnią przeszkodą dla oprogramowania uniwersalnego jest format plików wykonywalnych dla systemów operacyjnych. System operacyjny oczekuje, że uruchomione pliki będą miały określony format pliku binarnego Wszystko, co musisz wiedzieć o formatach plików i ich właściwościach Wszystko, co musisz wiedzieć o formatach plików i ich właściwościach Używamy pliku słowo zamiennie: muzyka, obraz, arkusz kalkulacyjny, pokaz slajdów , i tak dalej. Ale co w ogóle czyni plik „plikiem”? Spróbujmy zrozumieć tę podstawową część informatyki. . Na przykład pliki w formacie wykonywalnym i linkowalnym (ELF), które działają w systemach operacyjnych takich jak Linux i FreeBSD, muszą określać określone właściwości pliku w określonych bajtach, jak pokazano na poniższym obrazie.

The binarny interfejs aplikacji (ABI) wykazanie zdolności jest szczególnie ważne. Połączenie wywołań dostępnych z procesora, jądra i bibliotek systemowych, ABI jest podobny do interfejs programowania aplikacji (API) w ten sposób określa, w jaki sposób dwa programy komunikują się ze sobą. Ale API jest czymś używanym przez programistów (ludzi) w kodzie źródłowym do wskazywania dwóch programów powinien rozmawiać ze sobą. Interfejs ABI pozwala im to zrobić po skompilowaniu i uruchomieniu oprogramowania. Każdy system operacyjny implementuje określony ABI, który może, ale nie musi zmieniać między wersjami tego samego systemu operacyjnego.

Ogólnie rzecz biorąc, systemy operacyjne implementują własne ABI, określone przez kombinację typu procesora, jądra i dowolnych standardowych bibliotek systemowych. Ale czasami system operacyjny wdroży więcej niż jeden. FreeBSD obsługuje na przykład pliki binarne systemu Linux, ponieważ zapewnia Linux ABI jako dodatek do jądra FreeBSD (zamiast jądra Linux). Różni się to od programów wirtualizacyjnych Czym jest maszyna wirtualna? Wszystko, co musisz wiedzieć, co to jest maszyna wirtualna? Wszystko, co musisz wiedzieć Maszyny wirtualne umożliwiają uruchamianie innych systemów operacyjnych na bieżącym komputerze. Oto, co powinieneś o nich wiedzieć. takich jak VMWare lub VirtualBox, które używają oprogramowania do symulacji całej maszyny (sprzętu i wszystkich). W rezultacie ten typ kompatybilności ABI jest szybszy, ale wymaga dużo więcej wysiłku. To dlatego jest rzadkie, chociaż Microsoft ostatnio widział wartość Ubuntu jest teraz dostępna w sklepie Windows. niewielu kiedykolwiek wyobrażało sobie, że żyją wystarczająco długo, aby być świadkiem. w robieniu tego.

Wyjątek: interpretowane oprogramowanie

Na podstawie powyższego dowiedzieliśmy się, że programiści piszą oprogramowanie dla jednego i tylko jednego rodzaju systemu docelowego. Chyba że nie. Istnieje wiele aplikacji, które można pobrać i uruchomić na komputerze Mac, a następnie skopiować i uruchomić w systemie Windows, a może nawet skopiować ponownie i uruchomić w systemie Linux bez żadnych problemów. Jak to jest możliwe?

Czy leżałem do tej pory??

Jak się okazuje, istnieje kategoria oprogramowania, które wygląda na powierzchni dokładnie tak “działa wszędzie.” Możesz pobrać i uruchomić go na dowolnej obsługiwanej platformie - słowo kluczowe to “utrzymany.” W rzeczywistości pobierasz kod źródłowy aplikacji, podczas gdy inna aplikacja ( interpretator) to rodzaj uruchamiania kodu źródłowego bezpośrednio w czasie rzeczywistym. Jest to coś z nadmiernego uproszczenia, więc spójrzmy dokładnie, jak to działa z kilkoma językami.

Jawa

Gdy Java została wydana po raz pierwszy, jej obietnica była (dosłownie) “Napisz raz, biegnij gdziekolwiek.” Pomysł polegał na tworzeniu aplikacji przy użyciu funkcji Java do zapisywania plików, wykonywania obliczeń lub tworzenia okna aplikacji. Następnie Java Runtime Enviornment (JRE) dla każdej obsługiwanej platformy komputerowej uruchamiałby kod i tłumaczył go na natywne funkcje systemu operacyjnego. Sztuką Javy jest to, że nie działa “bezpośrednio” w systemie operacyjnym. Działa w części środowiska JRE o nazwie Maszyna wirtualna Java i to działa w systemie operacyjnym.

Dzięki wstawieniu tej dodatkowej warstwy oprogramowania między aplikacją a systemem operacyjnym Java pozwala skupić się na zestawie funkcji, które są takie same w różnych systemach operacyjnych. Mówisz Javie, co chcesz zrobić, i JVM dla twojego systemu martwi się, jak to zrobić. Poniższy obrazek pokazuje to w akcji, gdy Java Desktop Application Framework JIDE Software wyświetla tę samą aplikację dla komputerów Mac (góra), Windows (lewa środkowa część), “czysta Java” (środkowy prawy) i Linux (dolny).

Zdjęcie: JIDE Software

Programy Java nie do końca “skompilować” sami w czasie rzeczywistym. Raczej kompilator Java przekształci je w “kod bajtowy.” Możesz myśleć o kodzie bajtowym jako na wpół upieczonym programie. Gdy programista wypuszcza aplikację, jest ona kompilowana w jak największym stopniu, nie wiedząc, na jakim systemie operacyjnym będzie działać. Gdy faktycznie go uruchomisz, uruchomi się JVM “upiecz to przez resztę drogi” w celu dopasowania do funkcji konkretnego systemu operacyjnego hosta.

Pyton

Popularnym językiem interpretowanym jest Python 5 powodów, dla których programowanie w języku Python nie jest bezużyteczne 5 powodów, dla których programowanie w języku Python nie jest bezużyteczne Python - albo go kochasz, albo go nienawidzisz. Możesz nawet huśtać się z jednego końca na drugi jak wahadło. Niezależnie od tego Python jest językiem, w którym trudno być ambiwalentnym. . Po uruchomieniu skryptu Python interpreter języka Python przetłumaczy kod na instrukcje dla systemu operacyjnego. Może także działać podobnie do Java: kiedy ty “import” kod spoza aplikacji jest kompilowany do kodu bajtowego przy pierwszym uruchomieniu. Następnie interpreter będzie wiedział, czy przy kolejnych uruchomieniach oryginalny kod się zmienił, w którym momencie ponownie skompiluje go do nowego kodu bajtowego.

Fajny produkt uboczny tego “na żądanie” Uruchamianie polega na tym, że możesz używać interpretera do interaktywnego programowania skryptów. Po prostu pisząc “pyton” w wierszu poleceń uruchomisz interpretera, możesz uruchomić kod i natychmiast zobaczyć wyniki.

Oznacza to, że programiści mogą bawić się i poprawiać “relacja na żywo.” Następnie, gdy wiersz kodu zrobi, co chce, skopiuj go i wklej do pliku skryptu (który jest znacznie wydajniejszy niż “test kompilacji kodu” cykl, który muszą wykonać programiści nieinterpretowani).

Nawet jeśli oprogramowanie jest takie samo, prawdopodobnie nie jest

Niestety dla użytkowników branża technologiczna nie opracowała naprawdę “uniwersalny” format. I może nigdy tego nie zrobić. Wprowadzenie tego rodzaju standardów często skutkuje “najmniejszy wspólny mianownik” rozwiązanie z ustępstwami w celu uzyskania akceptacji wszystkich.

Co myślisz? Czy wolałbyś mieć uniwersalnie kompatybilne oprogramowanie, nawet jeśli oznaczałoby to, że nie było tak dobre? Czy jesteś w porządku z używanym systemem operacyjnym i nie interesujesz się aplikacjami z innych platform? Daj nam znać poniżej w komentarzach!

Kredyty obrazkowe: Masterchief_Productions / Shutterstock




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.