Apakah linux binary bersifat universal untuk semua jenis distribusi?

15

Saya kebetulan menginstal model sim VHDL simulator di Linux. Manual mengatakan itu hanya mendukung RedHat atau Suse, tetapi saya hanya mencoba menginstalnya di Ubuntu. Dan, saya bisa menginstalnya tanpa masalah.

masukkan deskripsi gambar di sini

  • Apakah linux binary bersifat universal untuk semua jenis distribusi? Maksud saya, jika saya membuat program pada distrubution A, dapatkah saya yakin itu akan berjalan di linux?
  • Mengapa sebagian besar vendor program komersial mengatakan program ini berjalan pada distribusi tertentu? (kebanyakan Redhat dan Suse, bukan ubuntu)
prosseek
sumber

Jawaban:

15

Ini dua pertanyaan:

Apakah biner Linux universal untuk semua distribusi?

Tergantung:

  • Jika program tidak menggunakan apa pun di luar kernel Linux, itu akan bersifat universal kecuali untuk pertanyaan 32- atau 64-bit. Linux "hello world" (program minimalis yang hanya mencetak "hello world" ke jendela terminal) mungkin tidak tergantung pada distribusi.
  • Jika program menggunakan pustaka atau layanan non-kernel apa pun (yang sebagian besar Linux, kernelnya cukup kecil), ada perbedaan di mana pustaka termasuk, versi mana pustaka ini dan di mana mereka berada. Jadi dalam hal ini (paling umum) distribusi kasus tidak sama.

Mengapa banyak program komersial mengatakan bahwa mereka hanya bekerja pada satu atau beberapa distribusi?

Karena ada sejumlah besar distribusi Linux , dan tidak ada yang ingin menguji program mereka pada semuanya.

Vendor komersial biasanya akan mengatakan bahwa mereka hanya mendukung distribusi tempat mereka menguji perangkat lunak mereka. Mungkin atau mungkin tidak berfungsi pada distribusi lain, dari sudut pandang vendor intinya hanya Anda tidak bisa mengeluh jika tidak bekerja pada distribusi yang tidak mereka dukung.

Distribusi mana yang dipilih untuk pengujian tergantung pada apa yang diharapkan vendor untuk digunakan oleh pelanggan mereka. Program komersial / profesional biasanya memilih distribusi perusahaan, mungkin melalui alasan yang mirip dengan "orang yang membayar OS mereka lebih mungkin membayar untuk perangkat lunak kami", mungkin hanya dengan menghitung distribusi yang digunakan oleh pelanggan mereka yang ada.

Lihat juga Mark Shuttleworth (orang yang menjadi alasan kami memiliki Ubuntu di tempat pertama) pada kompatibilitas biner antara Ubuntu dan Debian - Debian adalah kerabat distribusi terdekat dari Ubuntu.

jg-faustus
sumber
2

Baik RedHat dan SUSE memiliki tradisi Linux perusahaan yang panjang dan berhasil membuat paket-paket itu diproduksi dan diuji. Seiring berjalannya waktu, akan ada lebih banyak contoh paket yang telah diuji untuk berfungsi di Ubuntu. Bahkan, banyak paket seperti itu sejak tahun lalu datang sebagai diuji untuk bekerja dengan Ubuntu. Saat Canonical membuat perjanjian dengan lebih banyak vendor, akan ada lebih banyak paket bersertifikat Ubuntu.

Untuk pertanyaan pertama Anda: Jika Anda ingin membuat program yang berjalan di semua distribusi, buatlah yang dapat dieksekusi statis (dibandingkan dengan dinamis). Sebuah statically-linkedexecutable tidak tergantung pada pustaka sistem, oleh karena itu dapat bekerja di antara distribusi, selama arsitektur (seperti Intel / AMD) adalah sama.

Ini adalah sebuah program,

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

Mari kita kompilasi seperti biasa,

$ 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
$ 

Jadi, apa yang dapat Anda lakukan dengan program VHDL itu? Dapatkan file .rpm dan konversikan ke .deb menggunakan alien . Kemudian instal. Jika berhasil, Anda baik-baik saja. Jika tidak berhasil, gunakan ldduntuk mencari tahu file perpustakaan mana yang hilang. Pada skenario terburuk, buat mesin virtual untuk distribusi Linux lainnya dan jalankan program di sana.

pengguna4124
sumber
1

Saya menjawab kedua jg-faustus, tetapi, Anda juga harus berhati-hati tentang format paket. Bahkan jika executable itu sendiri portabel dan semua perpustakaan yang diperlukan ada, distro yang berbeda meletakkan file di tempat yang berbeda dan menggunakan alat yang berbeda untuk mengelola paket yang diinstal. Jika vendor mengemas produk mereka sebagai paket RPM, Anda harus menggunakan paket seperti ' alien 'untuk mengkonversi dan menginstalnya di bawah distribusi berbasis DEB seperti Ubuntu.

Jika mereka mendistribusikan perangkat lunak mereka sebagai kode sumber, maka Anda mungkin juga dapat mengompilasinya sendiri, pada titik yang dapat dieksekusi akan disesuaikan untuk sistem spesifik Anda (tetapi manajer paket ubuntu tidak akan mengetahuinya).

ImaginaryRobots
sumber