Yükseltme sırasında açık kaynaklı yazılımları yamalamak bir seçenek değil mi?


13

Kısa bir süre önce uygulamamla entegre ettiğim açık kaynaklı bir yazılım paketinde oldukça can sıkıcı (onaylanmış) bir hatayla karşılaştım. Genel sorun izleyiciye göre, bu hata yazılımın en son sürümünde çözülmüştür.

Bazen, belirli bir modülün pahalı bir yeniden düzenleyicisinden kaçınmak için bu hata düzeltmesine İHTİYACINIZ VAR, ancak teknik ve / veya siyasi nedenlerle, en son sürüme yükseltme yapamazsınız.

Yapılan kod değişikliklerini incelerken, düzeltme, uygulanabilir bir seçeneğin kodu kendim yamalamak ve yazılımın geçerli onaylı sürümünü yeniden derlemek olduğunu düşünecek kadar basit görünüyor, ancak dedektörler bunun neredeyse her zaman kötü bir fikir olduğunu iddia etmek istiyor riskli ve zahmetli bir karmaşıklık getiriyor.

Gözlerinde bu kod değişikliği sadece bizim kullanımımız için yapıldığından, kod tabanımızın bir parçası olmalı, yani açık kaynaklı yazılımı üçüncü taraf bağımlılığı olarak tanıtmak yerine, yeni bir proje olarak tanıtmamız ve otomatik olarak derleme sürecimize dahil edilir.

Bana göre bu kodun kaynak kontrol deposundan bizimkine çekeceğimiz için yanlış olduğunu düşünüyorum ve bundan önce gelen kod değişikliklerinin arkasındaki geçmişi kaybediyoruz. Ayrıca, yapılması gereken küçük bir kod değişikliği için çok karmaşık bir şey gibi görünüyor.

Bu durumda yukarıdakileri yapmak kötü bir fikir olur mu? Eğer öyleyse, o zaman açık kaynağın değişmesi gerektiğinde ideal durum nedir, ancak sadece evde faydalanmanız için?


1
Sorunun yapıcı olmadığını veya geliştirilebileceğini düşünüyorsanız lütfen bize bildirin.
maple_shaft

Yazılımınıza entegre aracı güncelleyemiyorsanız, tek yapmanız gereken aracı düzeltmektir, böylece hata giderilir. Yalnızca kendi kodunuzun yeniden düzenlenmesi anlamına gelirse aracı güncellememek önemlidir.
Ramhound

Yanıtlar:


12

Karşılaştığınız sorunu olmayan daha yeni bir sürümü kullanamıyorsanız, sahip olduğunuz tek seçenek

  • sorunla yaşa ve bir çözüm bul
  • kütüphaneyi çatallayın ve özel sürümünüzde düzeltin (etkin olarak yapacağınız şey budur)
  • havlu atmak ve yöneticilerinize sorunun aşılmaz olduğunu söyleyin (size açık iki seçenek var gibi, bu bir yalan olurdu).


Senin pozisyonunda bulundum, seçenek 2 (özel çatal yap) genellikle en lezzetli çözümdür. Açık kaynak kütüphanelerle uğraşırken, özellikle de hızla gelişen ve sürümler arasında geriye dönük uyumluluğu bozma alışkanlığına sahip olanlar budur (benim deneyimime göre böyle şeyler yapmak için en yaygın nedendir).
Birkaç OSS kütüphanesi için beni yönlendirdi ve ekipler Sarmalayıcıları hepsinin etrafına zorunlu kılmanın ve üçüncü taraf kitaplıklarının işlevselliğine sadece bu sarmalayıcılar aracılığıyla erişmenin bir parçası oldum. Bu şekilde, üçüncü taraf bir kütüphaneyi kodumuzu kıracak kadar farklı bir sürümle değiştirmemiz gerekirse, değişiklikler en azından büyük ölçüde bu paketleyiciyle sınırlıdır. En güzel değil (kod ekler, karmaşıklık ve maliyet performansı ekleyebilir), ancak bazen akıl sağlığınızı korumanın tek yolu budur.


İlginç! Ben ayrışmaya yardımcı olmak için kütüphaneyi sarma olasılığını hiç düşünmedim. Giriş için teşekkürler!
maple_shaft

Sarmalayıcıları kare birinden kullanırsanız iyi bir fikirdir. Kütüphaneyi doğrudan kullanıyorsanız, genel bir sargıya geçmek çok fazla kodun yeniden düzenlenmesi ve yeniden test edilmesini gerektirir.
Blrfl

1
@Blrfl evet, bu yüzden hafife alınmak için bir adım değil. Ancak en az bir durumda, bir üçüncü taraf (OSS) kütüphanesi tüm paketlerini ve sınıf adlarını 2 küçük sürüm arasında değiştirdi ve benimsemekten başka bir yol yoktu, bu yüzden yeniden düzenleme yine de yapılmalıdır. Bu şekilde, gelecekteki kanıtı sonuçlandırdık ve yeni sürümü kullanma gereksinimine neden olan sorunu çözdük.
13:50, jwenting

@jwenting: Kesinlikle katılıyorum. Boost ile aynı şeyi yapıyorum çünkü bazı uygulamaları iyi olsa da, arayüzler geniş olabilir. Bu da etrafta bir şeyleri sık sık değiştirme eğilimindedir.
Blrfl

2
Bazı Linux dağıtımlarının, güvenlik yamalarını önceki sürümlere geri vererek kendi yazılımlarını etkin bir şekilde koruduğunu unutmayın.
Liori

6

Ne yapmak üzeresiniz, üçüncü taraf yazılımları bir araya getirdiğiniz ve sürümlerini izlemeyi planladığınız daha yaygın durumda kötü bir fikirdir . Genellikle bunu yaparlar, çünkü üçüncü taraf bileşeninde, bakımcıların ihtiyacınız olan şekilde uygulamak veya uygulamak istemediği bir özellik isterler.

Ancak, açıkça size söyledi değil paketlenmiş kod yükseltin. Bu, sizi üçüncü taraf bileşeninin bakımını etkili bir şekilde yapar. Bu nedenle, yamalamanın iyi bir fikir olup olmadığı, yalnızca bu kodun istenen etkiye güvenecek kadar iyi anlayacağınıza bağlıdır . Entegrasyon testleriniz, aslında, varsaydıklarınızı yaptığını doğrulamak için yeterli olmalıdır. Bu nedenle, durumu söylediğiniz gibi, bana yorumcuların yanlış olduğu anlaşılıyor.


3

Herkesin maliyetleri, faydaları ve riskleri mideye çekebildiği sürece bunu yapmakta yanlış bir şey yoktur.

... düzeltme, kodu kendim düzeltmek için yeterince basit görünüyor ...

Yapmanız gereken bir işiniz olduğunda, mükemmel (tam olarak istediğiniz şey olan bir üçüncü taraf kütüphaneye sahip olmak) yeterince iyinin düşmanıdır (kendiniz yamanız) ve bazen böyle şeyler yapmanız gerekir. Ticari kütüphaneler için kaynak lisansları satın aldığımız ve satıcıya ulaşmadan önce sorunları çözebileceğimiz bir dizi proje yaptım.

... dedektörler, riskli olduğu ve zahmetli bir karmaşıklık getirdiği için bunun neredeyse her zaman kötü bir fikir olduğunu savunmak istiyorlar.

Başkasının kodunu incelemek, bir sorunu tanımlamak ve bir düzeltme yazmak için parçalara sahip değilseniz, kötü bir fikirdir. Kodun kurum içi mi yoksa üçüncü taraf mı olduğu doğrudur; tek fark, kucağınıza inmeden önce bir kabinin veya bina duvarının üzerine atılmış olup olmadığıdır.

Senin iftiralarını basitçe maliyetlerini tartı olmadan bir kenara fikrini fırçalama yapıyorsanız değil bu yamayı yapıyor, onlar da derslerine yapmıyoruz. Yamanızın gidereceği hatadan etkilenen çok sayıda şirket içi kodunuz varsa, etrafınızda çalışmak ve doğru çalıştığından emin olmak için her şeyi yeniden test etmek zorunda kalacaksınız. Daha sonra, paketi bug-fix sürümüne yükseltirseniz, geçici çözümlerinizi bulup kaldırmanız ve tekrar test etmeniz gerekebilir. Bunu yapmanın riskleri de vardır, örneğin, değiştirdiğiniz bir vakayı kaçırmak veya testi yetersiz tutmak gibi. Şahsen, kaynağında bir hatayı düzeltme fırsatı bulursam, kodun geri kalanını bir sineklik ile kovalamaktan ziyade her şeyi alacağımı umuyorum.

... kod değişikliği bizim tarafımızdan yapıldı ... kod tabanımızın bir parçası olmalı ... onu yeni bir proje olarak tanıtmalı ve otomatik yapısını derleme sürecimize dahil etmeliyiz.

Bir yama yapıyorsanız, yama kendi kodunuzun bir parçasıdır, yani onu sürecinizin bir parçası haline getirmeniz gerekir. Bu, sisteminize% 100 kodunuzu ekleyen bir şey eklemekten farklı değildir. Üçüncü taraf dağıtımına sakrosanct gibi davranın ve tıpkı kaynak kodu gibi bir modüle yerleştirin. Yazdığınız tüm yamalar ayrı dosyalarda saklanır ve oluşturma işleminin bir parçası olarak uygulanır. Bu şekilde her zaman temiz kaynaktan yamalı kaynağa ve yerleşik ürüne geçersiniz ve neler olduğunu tam olarak gösterebilirsiniz. (Bazı kişiler bunu sürüm denetiminde paketinden çıkarır, el ekler, yeniden paketler ve saklar. Bu kötü.)

... kodlarını kaynak kontrol havuzundan bizimkine çekerdik ve kod değişikliklerinin arkasındaki geçmişi kaybederiz ...

Üçüncü taraf kitaplığına üçüncü taraf bağımlılığı olarak davranıyorsanız, başlangıç ​​için bu geçmişe sahip değilsiniz ve hiçbir şey kaybetmiyorsunuz. Üçüncü tarafın deposuna sürekli erişiminiz varsa, ihtiyacınız olması halinde bu konuda danışabilirsiniz. Üçüncü taraf sürümlerine, kendi sisteminize değiştirmeden kontrol ettiğiniz amorf lekeler gibi davranılmalıdır. Kullandığınız sürüm ve daha sonraki sürümler arasındaki değişikliklere bakmanız gerekiyorsa, bunu yapabilir ve isterseniz, istediğiniz değişiklikleri içeren eski sürüme düzeltme ekleri getirebilirsiniz.

Ayrıca, yapılması gereken küçük bir kod değişikliği için çok karmaşık bir şey gibi görünüyor.

Derleme işleminiz yeterince karmaşıksa, bunu eklemek kendi kodunuzu eklemekten daha zor olmamalıdır. Açma / düzeltme eki / oluşturma işleminin otomajik olduğu noktaya ulaşmada az miktarda emek vardır, ancak bir kez yapıldığında sonsuza kadar yapılır. Şimdi bir hata olabilir, ancak gelecekte yirmi olabilir. Varsa, şimdi hepsini desteklemek için zemin hazırladığınızdan çok daha mutlu olacaksınız, çünkü gelecek 19 ile daha az iş yapmayı başaracaktır.


2

Yapmak istediğiniz şey yeterince makul görünüyor, ancak buna karşı çıkmak için (ses?) Süreç nedenleri var gibi görünüyor. Önerilen çözümleri karşılaştırmayacağım, ama belki de pastanızı almanın ve yemenin bir yolu var:

Söz konusu açık kaynak projesi buna izin veriyorsa, geri taşınan hata düzeltmenizi depolarına katkıda bulunun. Yani, 1.5.2 sürümünü kullanıyorsanız ve mevcut kararlı sürüm 1.6.1 ise, 1.5.2'ye bir yama ekleyin. Kabul edilirse, sabit kaynağı doğrudan depodan (belki de sürüm 1.5.3 olarak) alabilir ve herkesi mutlu edebilirsiniz.

Başka bir deyişle: Durumunuzda olan herkes için de ekleyin. Tabii ki bu ancak proje yayımlanan sürümler için güncellemeleri destekliyorsa (veya en azından izin veriyorsa) mümkündür. Ama bu kesinlikle bu günlerde oldukça standart bir uygulama.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.