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 systemem Linux nie jest kompatybilny z pakietem instalacyjnym Windows. Co powiesz na swój tablet z Androidem? iPhone? PS4? Dlaczego nie możesz wziąć tego oprogramowania i używać go gdziekolwiek chcesz? Przeanalizujmy różne bariery w marzeniu „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 sieć Programowanie vs. Tworzenie stron internetowych: jaka jest różnica?Można by pomyśleć, że programiści aplikacji i programiści wykonują tę samą pracę, ale to nie jest prawda. Oto kluczowe różnice między programistami i twórcami stron internetowych.

instagram viewer
Czytaj więcej ), 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.
proces tworzenia oprogramowania zgodnego z systemem operacyjnym

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ą 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.

podstawy jądra kompatybilności z oprogramowaniem
Ź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 związku z tym 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 systemowelub kolekcje podstawowych funkcji. Istnieją biblioteki, więc (na przykład) każdy program, który zapisuje pliki na dysku twardym, nie musi pisać funkcji, aby to zrobić. Zamiast tego po prostu linki do biblioteka systemowa i korzysta z istniejącej funkcji. Biblioteka GLibC dla Linux jest doskonałym przykładem, podobnie jak pliki .DLL w Win32 API lub zawartość katalogu Mac / System / Library Jak uzyskać dostęp do folderu biblioteki OS X i dlaczego jest przydatnyWiększość folderów Biblioteki OS X najlepiej zostawić w spokoju, ale dobrze jest poznać swoją drogę w Bibliotece użytkownika. Czytaj więcej .

biblioteki systemów kompatybilności oprogramowania
Źródło obrazu: 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ą także wykonywać wywołania systemowe do jądra dla wygody. Jak można się domyślać, oznacza to, że biblioteki te są napisane dla konkretnego jądra i dlatego 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 uruchamiane przez niego pliki będą podążać za określonym format pliku binarnego Wszystko, co musisz wiedzieć o formatach plików i ich właściwościachPliku słów używamy 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. Czytaj więcej . 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 poniżej wizerunek.

nagłówek elf kompatybilności oprogramowania os

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 na 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). To różni się od programy wirtualizacyjne 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ć. Czytaj więcej 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. Dlatego jest to rzadkie Microsoft ostatnio widział wartość Ubuntu jest teraz dostępny w sklepie Windows StoreZnawcy Windows mogą teraz pobierać i instalować Ubuntu na Windows 10. To łączy Linuksa i Windowsa w bezbożny związek, który niewielu wyobrażało sobie, że będą żyć wystarczająco długo, aby być świadkiem. Czytaj więcej 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. Z wyjątkiem sytuacji, gdy 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 tak, jakby „działało wszędzie”. Możesz pobrać i uruchomić na dowolnym obsługiwana platforma - słowo kluczowe to „obsługiwane”. 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. To jest uproszczenie, więc przyjrzyjmy się dokładnie, jak to działa w kilku językach.

Jawa

Gdy Java została wydana po raz pierwszy, jej obietnicą było (dosłownie) „pisanie raz, uruchamianie gdziekolwiek” Chodziło o stworzenie aplikacje przy użyciu funkcji Java do zapisywania plików, wykonywania obliczeń lub tworzenia aplikacji okno. Następnie Środowisko wykonawcze Java (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 ona „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ższe zdjęcie pokazuje to w akcji, gdzie Java Desktop Application Framework firmy JIDE Software wyświetla tę samą aplikację dla komputerów Mac (u góry), Windows (środkowy lewy), „czystej Java” (środkowy prawy) i Linux (dolny).

kompatybilność oprogramowania jide jdaf
Zdjęcie: JIDE Software

Programy Java nie „dokładnie się” kompilują w czasie rzeczywistym. Zamiast tego 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 skompilowana w jak największym stopniu, nie wiedząc, na jakim systemie operacyjnym będzie działać. Gdy faktycznie go uruchomisz, JVM „upiecze go do końca”, aby dopasować go do określonych funkcji systemu operacyjnego hosta.

Pyton

Popularnym tłumaczonym językiem jest Pyton 5 powodów, dla których programowanie w języku Python nie jest bezużytecznePython - albo to lubisz, albo 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. Czytaj więcej . Po uruchomieniu skryptu Python interpreter języka Python przetłumaczy kod na instrukcje dla systemu operacyjnego. Może również działać podobnie do Javy: kiedy „importujesz” kod spoza aplikacji, jest on 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.

Fajnym produktem ubocznym tego działania „na żądanie” jest to, że można użyć interpretera do interaktywnego programowania skryptów. Po prostu wpisując „python” w wierszu poleceń, uruchomisz interpreter, możesz uruchomić kod i natychmiast zobaczyć wyniki.

interpreter języka Python kompatybilny z oprogramowaniem

Oznacza to, że programiści mogą bawić się i poprawiać „na żywo”. Następnie, gdy wiersz kodu zrobi, co chce, skopiuj go i wklej plik skryptu (który jest znacznie wydajniejszy niż cykl „testowania i kompilowania kodu”, który muszą wykonywać programiści nieinterpretowani).

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

Niestety dla użytkowników branża technologiczna nie opracowała prawdziwie „uniwersalnego” formatu. I może nigdy tego nie zrobić. Wprowadzenie tego rodzaju norm często skutkuje rozwiązaniem „najmniej wspólnego mianownika”, przy czym ustępstwa mają na celu uzyskanie 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

Aaron od ponad piętnastu lat jest zagłębiony w technologię jako analityk biznesowy i kierownik projektu, i jest lojalnym użytkownikiem Ubuntu prawie tak długo (od Breezy Badger). Jego zainteresowania obejmują open source, aplikacje dla małych firm, integrację Linuksa i Androida oraz przetwarzanie w trybie zwykłego tekstu.