Greg K-H: "Rust ile yeni kod yazmak herkesin yararına"
(lore.kernel.org)Rust neden Linux çekirdeğine dahil edilmeli?
- Son 15 yılda neredeyse tüm Linux çekirdeği hata düzeltmelerini ve güvenlik sorunlarını incelemiş biri olarak, Rust’un neden gerekli olduğundan söz etmek istiyorum
- Her hata düzeltmesi kararlı sürüm ağacına girmiyor, ancak önemli olanlar genellikle giriyor ve ben de tüm çekirdek CVE’lerini kontrol eden bir konumdayım
C’nin sınırları ve Rust’un avantajları
- Linux çekirdeğinde ortaya çıkan hataların büyük kısmı C dilinin yapısal sınırlamalarından kaynaklanıyor
- Özellikle, basit hatalardan doğan bug’lar çok yaygın ve bu tür sorunlar Rust’ta neredeyse hiç görülmüyor
- Bellek üzerine yazma (Rust her durumu yakalamasa da bunun önemli bir bölümünü çözebilir)
- Hata yolu temizliği sorunları
- Hata değeri kontrolünün atlanması
- Use-after-free (serbest bırakıldıktan sonra kullanım) hataları
- Rust çekirdeğe dahil edildiğinde geliştiriciler ve bakımcılar bu tür temel hatalarla uğraşmak yerine gerçek anlamda zor problemlere (mantık hataları, yarış durumları vb.) odaklanabilir
Mevcut C kod tabanı da korunmalı
- Bugünkü Linux çekirdeği 30 milyondan fazla satır C kodundan oluşuyor ve bunun kısa sürede Rust ile değiştirilmesi mümkün değil
- Bu nedenle Kees, Gustavo ve diğer geliştiricilerin yürüttüğü C kodunu daha güvenli hale getirme çalışmaları gerekli ve sürdürülmeli
- İdeal yaklaşım, Rust’un mevcut kodu tamamen değiştirmesi değil, yeni kodun (özellikle sürücülerin) Rust ile yazılarak sorunların azaltılması
Rust’un sunduğu API güvenliği
- Rust, çekirdek içi API’lerin daha güvenli ve daha kolay kullanılacak şekilde tasarlanmasını sağlar
- Mevcut C tabanlı çekirdek API’leri karmaşık, hata yapmaya açık ve bakımcıların çok ayrıntılı inceleme yapmasını gerektiren bir yapıda
- Örneğin
struct cdevgibi yapıları güvenli kullanmanın birden fazla yolu var ve bunu doğru uygulamak için ciddi deneyim gerekiyor - Rust ile API’ler daha net tanımlanabildiği için geliştiricilerin hata yapma olasılığı büyük ölçüde azaltılabilir
- Bu yalnızca Rust kullananlar için değil, mevcut C kodunu kullananlar için de faydalı bir değişim
Rust’u benimsemenin zor olacağı yönündeki endişelere yanıt
- Rust her şeyi çözen sihirli bir araç değil → ancak mevcut sorunların önemli bir bölümünü çözebilir
- Bakımcıların yükü artacak → ancak Rust’un çekirdeğe girmesini isteyen geliştiriciler bu işi doğrudan kendileri yapıyor
- Karma dilli bir kod tabanını bakımının zor olması → ancak Linux çekirdeği şimdiye kadar bundan çok daha zor sorunları çözdü
Sonuç
- Linux, dünyanın dört bir yanında sayısız geliştiricinin sorun çözmek için kullandığı bir araç ve
- artık donanım için güvenli kod yazmak isteyen geliştiricilerin talebi varsa, bu talep göz ardı edilmemeli
- Linux geliştirme modeli, kimsenin öngöremediği bir ölçekte büyüyerek olağanüstü bir mühendislik yetkinliği gösterdi
- Artık Rust’u benimseyerek önümüzdeki 20 yıldan fazlası için ilerleme zamanı
Yeni teknolojileri ve fikirleri benimsemeli, toplulukla birlikte başarıya ulaşmak için çalışmalıyız.
24 yorum
Rust’un benimsenmesi,
memory safetydüşünüldüğünde kaçınılması zor bir değişiklik gibi görünüyor. Muhtemelen uygun bir orta yol bulunarak yeniden toparlanmaya çalışılacaktır.Ama kişisel olarak Rust’ın anahtar sözcükleri gözüme pek tanıdık gelmiyor; uzun zaman sonra tekrar baktığımda da hatırlamak zor oluyor, bu yüzden bir türlü elim gitmiyor ;;;; Hepsinin gerekli olduğunu biliyorum ama bazen İngilizcedeki düzensiz fiilleri zorla ezberliyormuşum gibi hissettiriyor. Buna rağmen Rust ile yazılmış çıktıların sahada daha az sorun çıkardığı da bir gerçek olunca.....
Henüz olgunlaşmamış bir dili çekirdeğe dahil etmek istememenin bu kadar eleştirilecek bir şey olup olmadığından emin değilim. Şu anda çevrenizde Rust’a gerçekten hakim birini bulmaya kalksanız neredeyse yok denecek kadar az değil mi? Bana kalırsa dil biraz daha olgunlaştığında ve kullanıcı tabanı da eski dillerin kullanıcıları kadar olmasa bile yeterince oluştuğunda dahil edilse de geç kalınmış sayılmaz. Rust dilinin faydalı olduğu, Linux çekirdeğine uygulanmasa bile fazlasıyla kanıtlanabilir diye düşünüyorum.
Rust’ın şu anki haliyle bile "hâlâ olgunlaşmamış bir dil" denmesini duymak başlı başına şaşırtıcı ama, bundan ayrı olarak, çekirdekte hâlâ güvenli olmayan dillerin ağırlığını azaltmaya çalışmanın bu kadar yerilmesi gereken bir şey olup olmadığını da sorguluyorum. Hemen çevrenizde, C dilinde çekirdeğe katkı yapabilecek düzeyde ustalaşmış ve güvenli kod yazabilen çok kişi var mı gerçekten? C dilinden daha fazla olgunlaşma beklemektense, yeni çağın gereksinimlerinin yeterince netleştiği bugün tam da geç kalınmamış bir zaman gibi görünüyor.
Rust zaten hâlihazırda faydalı; çekirdeğe dahil olmaya çalışmasının nedeni de faydalı olduğunu kanıtlamak olmayacaktır.
İlk başta Rust’ı kullanmaya karar verdiklerinde, muhtemelen bununla ilgili bazı tartışmalar olmuştur.
C konusunda yetkin olanlarla Rust konusunda yetkin olanların hangisinin havuzunun daha geniş olduğunu düşünürsek, C tarafı ezici biçimde daha büyük görünüyor.
Alan bilgisine zaten tamamen sahip bir programcının bir dil daha öğrenmesi o kadar da büyük bir mesele mi diye düşünülebilir,
ama çekirdek üzerinde çalışan kişilerin talep ettiği yetkinlik seviyesi bambaşka bir konu olsa gerek...
Bu görüş de güzelmiş.
Forklayıp ayrılsın denmesini hiç anlayamıyorum. Linus neden Linux'tan fork alıp ayrılsın ki?
Linus'a “forklayıp ayrıl” diyen biri var mı? Bu tartışmada bunu söyleyen birini görmedim sanırım..
Ben de bir Rust kullanıcısıyım, ancak Rust kodu ile C kodu iç içe geçtiğinde, açık kaynakta Rust koduna ne ölçüde izin verileceğine dair çok sıkı kurallar olmadıkça bunun kontrol edilemez hâle geleceğini ya da en azından inceleme ve bakım maliyetini ciddi biçimde artıracağını düşünüyorum; bu yüzden ekleme yapmadan bir fork açmanın en akıllıca seçenek olduğu kanaatindeyim.
Çekirdek konusunda çok bilgili değilim ama C kodunu Rust'a otomatik çevirmek mümkün olsa güzel olurdu diye düşünüyorum. Elbette kod çevirisi sorununun yanı sıra insanlarla ilgili sorunlar da olacaktır.
Çekirdeğe Rust eklenmesini isteyen bu kadar çok kişi varsa, projeyi fork'layıp yeni bir projeye geçemezler mi? Sonra yeterince olgunlaştığında büyük dağıtımlar Rust tabanlı çekirdeğe geçer diye düşünüyorum.
Neden birbirleriyle kavga ettiklerini pek anlayamıyorum.
Kernel geliştirme deneyiminiz olup olmadığını tam bilmediğim için ne söylemem gerektiğinden emin değilim.
Öncelikle, Rust dilini uygulamak demek çekirdeği Rust’a çevirelim demek değildir. Bunu ayırıp bir başka çekirdek daha yapsak olmaz mı diye sorabilirsiniz, ancak
amaç çekirdeği Rust ile yazmak değil; çekirdekte aygıt sürücüleri için yalnızca arayüzü Rust ile bir
wrapperolarak hazırlayıp aygıt sürücülerinin sadece Rust ileyazılabilmesini sağlayacak şekilde iyileştirme yapmayı önermektir. Bu yüzden yeni bir projeye gitmenin bir anlamı yoktur.
Linux tarafında geliştirme yapmışlığım yok.
Aygıt sürücülerinin Rust wrapper'ları çekirdekten ayrılamayan bir yapıda sanırım...
Çekirdek kararlılığı gerekçesiyle zehirli üslubu meşrulaştıragelen Linux topluluğunun, şimdi dönüp de "hoşuna gitmiyorsa fork'la" tepkisini makul bir yanıt sayması gerçekten ironik.
Linux topluluğundan değilim ama...
O kişilerle bu yorumu yazan kişiyi aynı topluluk olarak görmememiz gerektiğini düşünüyorum.
Fork’un sonucunun bir geçiş mi olacağı yoksa tam bir parçalanma dönemi mi olacağı konusunda öngörüde bulunmanın zor olabileceğini düşünüyorum.
Fork’tan sonra da upstream değişikliklerini yansıtmak pek keyifli bir durum olmayacaktır.
https://tr.news.hada.io/topic?id=16860
Realtime Linux çatallanmasının 20 yıl sonra birleştirildiğini görünce, çatallamaya karar verirken daha temkinli olmak gerekmez mi diye düşünüyorum
Bunu görünce bunu söylemiştim.
Gerçek zamanlı işlevler uzun süre çekirdekten ayrı bir proje olarak sürdürülebilmişti ve buna ihtiyaç duyanlar bunu alıp çekirdeğe uygulayarak kullanabiliyordu.
Rust kullanıcısıyım ama r/rust'ta hgwxx7_ tarafından yazılan şu yorum beni etkiledi1.
Stable sürüme backport gerektiğinde ya da benzeri bir nedenle iletişime geçtiğimde, o kadar yoğunken bile çok iyi yanıt verdiğini hatırlıyorum.
"Rust doğru cevap değil ama Java ve Python'a göre doğru cevaba daha yakın." -codemaster kimc-
Hacker News görüşü
Böyle nefret dolu yorumlar bildirilemiyor mu?
Katılıyorum.