« Tüm yayınlar

Linux çekirdeği eBPF ile $ORIGIN desteğine yaklaşıyor

Nix topluluğu, eBPF ve binfmt_misc üzerinden Linux çekirdeğine $ORIGIN desteği getiren bir yama serisini nasıl şekillendirdiğini anlatıyor.

Nix ekosisteminde taşınabilir (relocatable) ikili dosya sorunu için çekirdek düzeyinde bir çözüm şekilleniyor. Başlangıçta VFS alt sistemine doğrudan $ORIGIN desteği eklenmesi önerilmiş, ancak VFS bakımcısı Christian Brauner ve Nix topluluğundan John Ericson'ın katkısıyla çok daha esnek bir yaklaşım ortaya çıktı: binfmt_misc üzerinden çalışan, struct_ops tabanlı programlanabilir bir eBPF yükleyicisi.

Bu yaklaşımda bir eBPF programı, ELF ikili dosyalarını eşleştirip çalışma zamanında dinamik bağlayıcıyı (interpreter) belirleyebiliyor; böylece $ORIGIN hem PT_INTERP hem de shebang satırlarında desteklenebiliyor. Aynı mekanizma QEMU gibi geleneksel binfmt_misc kayıtlarının yerini de alabiliyor. Ancak klasik binfmt_misc devretme modelinin bir yan etkisi var: kayıtlı yorumlayıcı, sürecin kimliğini tamamen devralıyor, bu da argv[0] ve /proc/self/exe gibi kendi kendine konum belirleyen taşınabilir programlar için sorun yaratıyor.

Brauner'in gönderdiği yeni yama serisi bu sorunu çözmek için iki yeni dağıtım modu ekliyor; özellikle 'L' (loader substitution) modu, ikili dosyayı ana imaj olarak native şekilde çalıştırıp yalnızca PT_INTERP'i değiştiriyor, süreç kimliği bozulmuyor. Yama serisinin yakında -next dalına girmesi bekleniyor. Bu değişiklik kernel'e girdiğinde, yeni bir PT_INTERP_NIX segmentiyle geriye dönük uyumlu şekilde etkinleştirilecek bir NixOS modülü planlanıyor; böylece mevcut Nix ikili dosyaları etkilenmeden, isteğe bağlı olarak taşınabilirlik kazanabilecek.