Mengapa perpustakaan dikirimkan secara terpisah dan bukan dibundel dengan setiap program?

10

Saya tahu mengapa ini bagus secara umum: perbaikan keamanan yang lebih cepat, pengemasan yang lebih mudah, lebih banyak fitur. Namun, saya mencoba meyakinkan beberapa rekan kerja bahwa kita tidak perlu menggabungkan perpustakaan dengan program kita. Ini tidak akan berfungsi tanpa perpustakaan ini, tetapi perpustakaan telah stabil untuk sementara waktu sekarang dan akan tetap demikian untuk masa mendatang. Saya tidak melihat alasan untuk TIDAK membatalkannya.

Argumen apa yang bisa saya gunakan untuk meyakinkan mereka?


Situasi spesifik saya adalah ini: Saya sedang mengerjakan SymPy , yang merupakan perpustakaan Python open-source untuk matematika simbolik. Bagian inti dari itu adalah mpmath , yang merupakan perpustakaan untuk aritmatika floating point multi-previsi. SymPy tidak berfungsi tanpa mpmath, tidak ada alternatif. Karena itu, telah dibundel dengan SymPy sejak awal (saya diberitahu bahwa biasanya ada sedikit ketidakcocokan untuk memperbaiki setiap kali versi baru diimpor). Juga harus dicatat bahwa pengembang mpmath dulu terlibat dalam pengembangan SymPy. Sekarang ada masalah pada unbundling mpmath, Anda dapat membaca semuanya di sini .

Untuk meringkas diskusi di sana:

Membatalkan ikatan:

  • Agak lebih mudah porting ke Python 3 (argumen minor IMHO)

  • Kemasan lebih mudah untuk distribusi

  • Pembaruan fitur (keamanan) yang lebih cepat untuk pengguna

  • "Pengemasan dan penanganan dependensi adalah masalah yang sulit, tetapi mereka diselesaikan. Ini jelas bukan bidang di mana kita harus melakukan hal kita sendiri."

Simpan bundling:

  • Instalasi. Sangat mudah di Linux, lebih keras di Mac dan sangat keras di Windows. Kurangnya akses su dan masalah lainnya.

  • itu adalah bagian integral dari SymPy, yaitu sympy tidak bekerja tanpanya (sama sekali)

  • tidak ada paket lain, yang dapat melakukan pekerjaan mpmath

  • "Ketika saya, sebagai pengguna, mengunduh sympy, saya berharap itu hanya berfungsi."


Itulah situasi khusus saya, tetapi saya akan menerima jawaban yang memberikan jawaban umum yang baik juga.

VPeric
sumber
Anda perlu memberikan lebih banyak informasi dengan situasi spesifik Anda untuk mendapatkan jawaban yang lebih baik. Misalnya, lingkungan apa yang Anda rencanakan untuk dijalankan? Apakah akan terpapar ke internet?
tshepang
Apakah aplikasi Anda open source?
Anton Barkovsky
@Anton Ya, itu SymPy , perpustakaan Python open-source untuk matematika simbolik. Saya bekerja di dalamnya sebagai siswa GSoC (pengungkapan penuh :)).
VPeric
@Tshepang Diskusi dapat dilihat di: code.google.com/p/sympy/issues/detail?id=2482
VPeric
@VPeric: Akan lebih baik meringkas diskusi itu, hanya untuk menghemat waktu bagi mereka yang bersedia menjawab pertanyaan Anda.
tshepang

Jawaban:

5

Namun jawaban lain, tetapi yang saya anggap paling penting (hanya pendapat pribadi saya), meskipun yang lain semua adalah jawaban yang baik juga.

Pengemasan lib secara terpisah memungkinkan lib diperbarui tanpa perlu memperbarui aplikasi. Katakan ada bug di lib, alih-alih hanya dapat memperbarui lib, Anda harus memperbarui seluruh aplikasi. Yang berarti aplikasi Anda akan memerlukan versi versi tanpa kodenya bahkan berubah, hanya karena lib.

Patrick
sumber
1
Itu adalah poin penting, dan itu adalah bagian dari mengapa banyak distribusi tidak suka perpustakaan dibundel dengan program; misalnya Debian memiliki kebijakan untuk tidak mengikat pustaka dengan yang dapat dieksekusi atau menghubungkan pustaka secara statis kecuali jika hanya dapat digunakan oleh program tertentu (atau, untuk penghubungan statis, kasus-kasus di mana penghubungan dinamis tidak didukung).
Gilles 'SO- berhenti bersikap jahat'
Pada akhirnya, ini mungkin poin yang paling penting. Saya setuju dengan jawaban yang lain juga, tetapi saya harus memilih satu saja. :)
VPeric
6

Selain kelebihan yang Anda sebutkan (keamanan, pengemasan, fitur), saya dapat memikirkan beberapa hal lagi:

  • Seseorang yang akan menemukan fungsionalitas berguna untuk program lain tidak perlu melakukan pekerjaan membaginya. Itu jika dia bahkan tahu jika fungsi ada di proyek Anda dalam bentuk perpustakaan di tempat pertama. Ini tergantung pada seberapa baik itu dirancang ... jika proyek Anda cukup modular.

  • Dalam hal ini berguna untuk proyek lain, ini akan mengurangi ukuran penggunaan disk secara umum (misalnya hanya satu salinan kode).

  • Ini akan meningkatkan kualitas kode Anda, memaksa Anda untuk melakukan beberapa refactoring (sangat dibutuhkan). Seperti pada poin pertama di atas, ini juga tergantung pada kualitas kode Anda.

  • Meningkatkan jumlah pengguna perpustakaan (jika dipisah) akan membantu membuatnya lebih umum, yang kemungkinan akan meningkatkan kualitasnya juga.

tepang
sumber
1
Semua poin bagus. Saya kira itu bisa dibaca sebagai "pemeriksaan masa depan": beberapa poin Anda berlaku saat ini (mpmath hanya digunakan dalam beberapa proyek lain saat ini), tetapi mudah untuk melihat bahwa setiap poin Anda mendapatkan nilai untuk setiap proyek baru menggunakan mpmath.
VPeric
4

Meskipun keuntungannya jelas, kemudahan penyebaran tampaknya menjadi argumen utama untuk pengiriman perpustakaan bersama dengan program dalam kasus Anda.

Berikut beberapa argumen yang menentang bundling:

  • Di Linux, ini adalah tugas pengelola distribusi untuk memastikan bahwa perpustakaan Anda berfungsi baik dengan dependensinya. Kebanyakan pengguna akan mengunduh perpustakaan menggunakan manajer paket distribusi. Mereka yang menggunakan trunk biasanya tidak akan keberatan menghabiskan waktu mengkonfigurasi perpustakaan.

  • Di Windows dan Mac OS, manajer paket Python seperti pip biasanya digunakan, karena menginstal pustaka dengan tangan itu rumit.

  • Bahkan ada argumen tentang penggunaan-keras untuk mesin aplikasi Google, tetapi tidak semua kerangka web berjalan di atasnya. Banyak yang bahkan membutuhkan porting, ruang disk untuk perpustakaan terbatas, dan hosting aplikasi web itu memang! Tidak mungkin aplikasi web menggunakan matematika simbolik.

  • Tidak ada yang mencegah Anda menampilkan pesan kesalahan bersih jika ketergantungan tidak tersedia atau memiliki versi yang salah.

  • Orang-orang sering membencinya ketika program menganggap dirinya lebih pintar daripada mereka. Biarkan pengguna mengurus sistem mereka sendiri.

Anton Barkovsky
sumber
Bisakah Anda menjelaskan poin terakhir? Saya tidak tahu apakah ini argumen untuk / terhadap bundling.
tshepang
3
Saya memahaminya sebagai menentang bundling - pengguna ingin menginstal apa yang mereka inginkan, tidak meminta saya untuk memaksa versi tertentu pada mereka.
VPeric
3

Cara yang tepat untuk menangani unbundled dalam paket installer windows adalah dengan melakukan tes awal untuk keberadaan perpustakaan, dan jika tidak hadir untuk menawarkan untuk menginstalnya dari paket library yang Anda sertakan dalam paket installer perangkat lunak. Saya cukup yakin sebagian besar aplikasi GTK yang memiliki port windows melakukan sesuatu di sepanjang baris ini - saya tahu pidgin melakukannya.

Shadur
sumber
3

Satu ukuran tidak harus cocok untuk semua.

Untuk distribusi sumber, jika Anda bundel, pemaket pada banyak distribusi (setidaknya dari warisan Debian dan Fedora) harus melakukan pekerjaan tambahan untuk menonaktifkan atau menghapus bundling, karena kebijakan paket untuk platform tersebut melarang atau setidaknya sangat mencegah bundling. Karena itu, dengan bundling Anda menciptakan lebih banyak pekerjaan untuk hilir Anda dengan manfaat yang sangat sedikit. Mungkinkah argumen itu berbobot?

Distribusi biner (jika Anda menyediakannya) dapat berjalan baik; bundling mungkin masuk akal bagi mereka, karena mereka tidak digunakan oleh hilir.

Tetapi tidak ada alasan mengapa Anda tidak dapat membuat keputusan dan bundel yang berlawanan untuk installer Windows dan Mac.

Michael Ekstrand
sumber
1
Meskipun saya setuju secara umum, itu memang membuat beban tambahan (betapapun kecil) itu berarti bahwa mungkin tidak ada yang akan mendukung solusi ini.
VPeric
2

Bundling vs ketergantungan adalah perdebatan lama di dunia pengemasan. Dokumen ini menceritakan tentang dua aliran pemikiran ini: http://www.aosabook.org/en/packaging.html

Éric Araujo
sumber
2
Ini adalah bacaan yang menarik, tetapi lebih banyak berbicara tentang detail implementasi dan berbagai spesifikasi Python daripada filosofi umum.
VPeric