Czy linux binary jest uniwersalny dla wszystkich rodzajów dystrybucji?

15

Zdarza się, że instaluję symulator VHDL model sim na Linuksie. Podręcznik mówi, że obsługuje tylko RedHat lub Suse, ale właśnie próbowałem zainstalować go na Ubuntu. I mógłbym go zainstalować bez problemu.

wprowadź opis zdjęcia tutaj

  • Czy linux binary jest uniwersalny dla wszystkich rodzajów dystrybucji? Mam na myśli to, że jeśli utworzę program na temat rozproszenia A, czy mogę być pewien, że będzie działał na dowolnym systemie Linux?
  • Dlaczego większość sprzedawców programów komercyjnych twierdzi, że program działa w określonej dystrybucji? (głównie Redhat i Suse, nie ubuntu)
prosseek
źródło

Odpowiedzi:

15

To są dwa pytania:

Czy binarny system Linux jest uniwersalny dla wszystkich dystrybucji?

To zależy:

  • Jeśli program nie używa niczego poza jądrem Linuksa, będzie uniwersalny, z wyjątkiem pytania 32- lub 64-bitowego. Linux „hello world” (minimalistyczny program, który po prostu wypisuje „hello world” w oknie terminala) może być prawdopodobnie niezależny od dystrybucji.
  • Jeśli program korzysta z dowolnej biblioteki lub usługi innej niż jądro (która jest większością Linuksa, jądro jest dość małe), istnieją różnice w tym, które biblioteki są uwzględnione, w których wersjach są te biblioteki i gdzie się znajdują. Zatem w tym (najczęstszym) przypadku rozkłady nie są równe.

Dlaczego wiele programów komercyjnych mówi, że działają tylko w jednej lub kilku dystrybucjach?

Ponieważ istnieje bardzo duża liczba dystrybucji Linuksa i nikt nie chce testować ich programu na wszystkich z nich.

Sprzedawca komercyjny zwykle twierdzi, że obsługuje tylko dystrybucje, na których testował swoje oprogramowanie. Może, ale nie musi działać na innych dystrybucjach, z punktu widzenia dostawcy chodzi o to, że nie możesz narzekać, jeśli nie działa na dystrybucji, której nie obsługuje.

Wybór dystrybucji do testowania zależy od tego, czego dostawca oczekuje od klientów. Programy komercyjne / profesjonalne zwykle wybierają dystrybucje dla przedsiębiorstw, być może z rozumowania podobnego do „ludzie, którzy zapłacili za swój system operacyjny, częściej płacą za nasze oprogramowanie”, być może po prostu zliczając dystrybucje używane przez ich obecnych klientów.

Zobacz także Mark Shuttleworth (facet, z którego mamy przede wszystkim Ubuntu) na temat binarnej kompatybilności pomiędzy Ubuntu i Debianem - Debian jest najbliższym krewnym dystrybucji Ubuntu.

jg-faustus
źródło
2

Zarówno RedHat, jak i SUSE mają długą tradycję Linuksa dla przedsiębiorstw i udało im się wyprodukować i przetestować te pakiety. Z biegiem czasu pojawi się więcej przykładów pakietów, które zostały przetestowane pod kątem działania na Ubuntu. W rzeczywistości wiele takich pakietów od zeszłego roku jest testowanych pod kątem współpracy z Ubuntu. W miarę jak Canonical zawiera umowy z większą liczbą dostawców, będzie więcej pakietów z certyfikatem Ubuntu.

Pierwsze pytanie: jeśli chcesz stworzyć program działający we wszystkich dystrybucjach, utwórz statyczny (w porównaniu do dynamicznego) plik wykonywalny. Plik statically-linkedwykonywalny nie zależy od bibliotek systemowych, dlatego może działać między dystrybucjami, o ile architektura (taka jak Intel / AMD) jest taka sama.

Oto program

int main(void)
{ 
  printf("Hello, World!\n");
  return 0;
}

Skompilujmy jak zwykle,

$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, World!
$ ldd helloworld
    libc.so.6 => /lib/libc.so.6 (0x00007f3cc3481000)
...
$ 
$ gcc helloworld.c -static -o helloworld_static
$ ./helloworld
Hello, World!
$ ldd helloworld_static
    not a dynamic executable
$ 

Co więc możesz zrobić z tym programem VHDL? Pobierz plik .rpm i przekonwertuj go na .deb, używając alien . Następnie zainstaluj. Jeśli zadziałało, wszystko w porządku. Jeśli to nie działa, użyj, lddaby dowiedzieć się, którego pliku biblioteki brakuje. W najgorszym przypadku utwórz maszynę wirtualną dla innych dystrybucji systemu Linux i uruchom tam program.

użytkownik4124
źródło
1

Po drugie odpowiadam na odpowiedź jg-faustusa, ale musisz także uważać na format pakietu. Nawet jeśli same pliki wykonywalne są przenośne i istnieją wszystkie niezbędne biblioteki, różne dystrybucje umieszczają pliki w różnych miejscach i używają różnych narzędzi do zarządzania zainstalowanymi pakietami. Jeśli dostawca pakuje swój produkt jako pakiet RPM, będziesz musiał użyć pakietu takiego jak „ alien ”, aby przekonwertować i zainstalować go w ramach dystrybucji opartej na DEB, takiej jak Ubuntu.

Jeśli dystrybuują swoje oprogramowanie jako kod źródłowy, możesz również być w stanie samodzielnie go skompilować, w którym to momencie plik wykonywalny zostanie dostosowany do twojego konkretnego systemu (ale menedżer pakietów ubuntu nie będzie o tym wiedział).

ImaginaryRobots
źródło