Laporan Pengembangan FreeBSD Q2019 XNUMX

diterbitkan laporan perkembangan proyek FreeBSD dari Juli hingga September 2019. Di antara perubahan yang dapat kami catat:

  • Masalah umum dan sistemik
    • Tim Inti secara umum telah menyetujui kemungkinan memasukkan kode dalam sistem yang didistribusikan di bawah lisensi BSD dengan perjanjian paten tambahan (BSD+Paten), namun keputusan untuk memasukkan setiap komponen ke dalam sistem di bawah lisensi ini harus disetujui secara terpisah;
    • Pertemuan pertama kelompok kerja yang dibentuk untuk melakukan migrasi kode sumber dari sistem kendali sumber terpusat Subversion ke sistem desentralisasi Git berlangsung. Diskusi mengenai kelayakan migrasi masih berlangsung dan keputusan mengenai banyak masalah belum dikembangkan (misalnya, apa yang harus dilakukan dengan contrib/, apakah perlu membuat ulang hash di repositori git saat ini, dan cara terbaik untuk mengimplementasikan pengujian dari komitmen);
    • Dari NetBSD porting Toolkit KCSAN (Kernel Concurrency Sanitizer), yang memungkinkan Anda mendeteksi kondisi balapan antara thread kernel yang berjalan pada CPU berbeda;
    • Pekerjaan sedang dilakukan untuk menggunakan assembler bawaan (IAS) Clang alih-alih assembler binutils GNU;
    • Infrastruktur emulasi lingkungan Linux (Linuxulator) diadaptasi untuk bekerja pada arsitektur ARM64. Menerapkan panggilan sistem "renameat2". Utilitas strace telah ditingkatkan untuk mendiagnosis masalah pada executable Linux yang berjalan di Linuxulator. Masalah crash saat menghubungkan file yang dapat dieksekusi dengan glibc baru telah teratasi. Port dengan komponen Linux untuk Linuxulator telah diperbarui ke CentOS 7.7;
    • Sebagai bagian dari program Google Summer of Code, siswa berhasil menyelesaikan enam proyek: implementasi utilitas ping terpadu (IPv4/IPv6) disiapkan, alat untuk menguji firewall dan mengidentifikasi kesalahan pada kernel (Kernel sanitizer) dikembangkan, mac_ipacl modul diusulkan, kode ditulis untuk kompresi memori virtual dan pekerjaan telah dilakukan untuk memisahkan proses pembuatan port dari instalasi lokal;
    • Proyek pengujian fuzzing kernel FreeBSD menggunakan sistem terus berkembang syzkaller. Selama periode pelaporan, lebih dari sepuluh kesalahan diidentifikasi dan dihilangkan menggunakan syzkaller. Untuk menjalankan syzkaller di mesin virtual berbasis bhyve, server terpisah didedikasikan, dan menggunakan
      syzbot telah melakukan pengujian berbagai subsistem FreeBSD di infrastruktur Google. Mengatur transfer informasi tentang semua kerusakan ke layanan backtrace.io untuk menyederhanakan pengelompokan dan analisisnya;

    • Pekerjaan sedang dilakukan untuk memperbarui implementasi zlib di tingkat kernel.
      Kode terkait kompresi telah dimigrasikan dari zlib 1.0.4, yang dirilis lebih dari 20 tahun lalu, ke basis kode zlib 1.2.11 saat ini. Untuk menyatukan akses ke zlib, fungsi kompres, kompres2 dan buka kompresi telah ditambahkan ke kernel. Kode yang memastikan pengoperasian protokol PPP dari subsistem netgraph telah ditransfer untuk menggunakan implementasi sistem zlib, bukan edisi perpustakaan ini sendiri. Subsistem kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor, juga telah ditransfer ke zlib baru.
      if_mxge, bxe diperbarui dan ng_deflate;

    • Antarmuka kernel baru sedang dikembangkan sysctlinfo, yang memungkinkan Anda menemukan elemen dalam database parameter sysctl, diproses dalam bentuk MIB (Basis Informasi Manajemen), dan mentransfer informasi tentang objek ke ruang pengguna.
  • keamanan
    • Modul kernel dikembangkan mac_ipacl, berdasarkan Kerangka MAC TrustedBSD dan menerapkan sistem kontrol akses untuk pengaturan tumpukan jaringan untuk lingkungan jail. Misalnya, dengan menggunakan mac_ipacl, administrator sistem host dapat mencegah pengguna root di lingkungan jail mengubah atau mengatur alamat IP atau pengaturan subnet untuk antarmuka jaringan tertentu. Usulan sistem kontrol akses wajib memungkinkan mengatur daftar alamat IP dan subnet yang diperbolehkan untuk Jail, melarang pemasangan IP dan subnet tertentu di Jail, atau membatasi perubahan parameter hanya untuk antarmuka jaringan tertentu;
    • Intel menyumbangkan port tumpukan perangkat lunak untuk proyek tersebut TPM 2.0 (Modul Platform Tepercaya) untuk berinteraksi dengan chip komputasi aman, yang biasanya digunakan untuk memuat firmware dan bootloader OS yang terverifikasi. Komponen tumpukan disajikan dalam bentuk port security/tpm2-tss, security/tpm2-tools dan security/tpm2-abrmd. Port tpm2-tss mencakup perpustakaan untuk menggunakan API TPM2, tpm2-tools menyediakan utilitas baris perintah untuk melakukan operasi TPM, dan tpm2-abrmd berisi implementasi proses latar belakang komponen TPM Access Broker dan Resource Manager yang menggandakan permintaan dari pengguna TPM yang berbeda ke satu perangkat. Selain booting terverifikasi di FreeBSD, TPM dapat digunakan untuk meningkatkan keamanan Strongswan IPsec, SSH dan TLS dengan melakukan operasi kriptografi pada chip terpisah;
    • Kernel untuk arsitektur amd64 diadaptasi untuk booting menggunakan teknik proteksi W^X (write XOR executable), yang berarti bahwa halaman memori tidak dapat diakses secara bersamaan untuk penulisan dan eksekusi (kernel sekarang dapat dimuat menggunakan halaman memori yang dapat dieksekusi yang penulisannya terlarang). Metode perlindungan kernel baru disertakan dalam cabang HEAD dan akan disertakan dalam rilis FreeBSD 13.0 dan 12.2;
    • Untuk panggilan sistem mmap dan mprotect diimplementasikan makro PROT_MAX(), yang memungkinkan Anda menentukan kumpulan tanda pembatasan akses yang diizinkan untuk perubahan lebih lanjut (PROT_READ, PROT_WRITE, PROT_EXEC). Dengan menggunakan PROT_MAX(), pengembang dapat melarang transfer wilayah memori ke kategori yang dapat dieksekusi atau meminta memori yang tidak mengizinkan eksekusi, namun nantinya dapat diubah menjadi dapat dieksekusi. Misalnya, wilayah memori mungkin terbuka untuk penulisan hanya selama tautan dinamis atau pembuatan kode JIT, namun setelah penulisan selesai, wilayah tersebut dibatasi untuk membaca dan mengeksekusi saja, dan di masa mendatang, jika disusupi, penyerang tidak akan dapat mengaktifkan penulisan untuk blok memori itu. Selain PROT_MAX(), sysctl vm.imply_prot_max juga diimplementasikan, yang bila diaktifkan, menentukan kumpulan tanda yang valid berdasarkan parameter awal panggilan pertama ke mmap;
    • Untuk meningkatkan perlindungan terhadap eksploitasi kerentanan, selain teknik pengacakan ruang alamat (ASLR), mekanisme untuk mengacak offset pointer yang menangani bingkai tumpukan awal dan struktur yang ditempatkan pada tumpukan dengan informasi tentang lingkungan, parameter peluncuran program, dan data untuk gambar yang dapat dieksekusi dalam format ELF diusulkan;
    • Pekerjaan telah dilakukan untuk menghapus fungsi unsafe get dari libc (mulai dari standar C11, fungsi ini telah dikecualikan dari spesifikasi) dan untuk memperbaiki port yang masih menggunakan fungsi ini. Perubahan tersebut rencananya akan ditawarkan di FreeBSD 13.0;
    • Sebuah proyek eksperimental telah diluncurkan untuk menciptakan alat untuk mengatur lingkungan penjara berdasarkan kerangka kerja tersebut bisa untuk membuat dan mengekspor gambar, diimplementasikan mirip dengan Docker, dan driver nomad, yang menyediakan antarmuka untuk meluncurkan aplikasi secara dinamis di lingkungan jail. Model yang diusulkan memungkinkan kita untuk memisahkan proses pembuatan lingkungan jail dan penerapan aplikasi di dalamnya. Salah satu tujuan proyek ini adalah menyediakan sarana untuk memanipulasi penjara sebagai wadah bergaya Docker;
  • Penyimpanan dan sistem file
    • Dari NetBSD hingga utilitas "makefs". terharu Dukungan sistem file FAT (msdosfs). Perubahan yang disiapkan memungkinkan Anda membuat image FS dengan FAT tanpa menggunakan driver md dan tanpa otoritas root;
    • Pengerjaan ulang driver subsistem FUSE (Sistem file di USerspace) telah selesai, memungkinkan pembuatan implementasi sistem file di ruang pengguna. Driver yang awalnya dikirimkan mengandung banyak bug dan didasarkan pada FUSE 7.8, yang dirilis 11 tahun lalu. Sebagai bagian dari proyek modernisasi driver, dukungan untuk protokol FUSE 7.23 telah diterapkan, kode untuk memeriksa hak akses di sisi kernel (β€œ-o default_permissions”) telah ditambahkan, panggilan ke VOP_MKNOD, VOP_BMAP dan VOP_ADVLOCK telah ditambahkan, the kemampuan untuk menginterupsi operasi FUSE telah disediakan, dukungan untuk pipa tanpa nama dan soket unix telah ditambahkan di fusefs, kqueue dapat digunakan untuk /dev/fuse, parameter mount dapat diperbarui melalui β€œmount -u”, dukungan tambahan untuk mengekspor Fusef melalui NFS, menerapkan akuntansi RLIMIT_FSIZE, menambahkan flag FOPEN_KEEP_CACHE dan FUSE_ASYNC_READ, melakukan optimalisasi kinerja yang signifikan dan meningkatkan organisasi caching. Driver baru disertakan dalam cabang head dan stable/12 (termasuk dalam FreeBSD 12.1);
    • Implementasi NFSv4.2 (RFC-7862) untuk FreeBSD hampir selesai. Fokus utama selama periode pelaporan adalah pengujian. Pengujian telah diselesaikan untuk memeriksa kompatibilitas dengan implementasi Linux, namun pengujian server pNFS dengan NFSv4.2 masih berlangsung. Secara umum, kode tersebut sudah dianggap siap untuk diintegrasikan ke dalam cabang utama FreeBSD/saat ini. Versi baru NFS menambahkan dukungan untuk fungsi posix_fadvise, posix_fallocation, mode SEEKHOLE/SEEKDATA di lseek, operasi penyalinan lokal bagian file di server (tanpa transfer ke klien);
  • Dukungan perangkat keras
    • Sebuah proyek telah diluncurkan untuk meningkatkan kinerja FreeBSD pada laptop. Perangkat pertama yang diaudit dukungan perangkat kerasnya di FreeBSD adalah laptop Lenovo X1 Carbon generasi ketujuh;
    • CheriBSD, cabang dari FreeBSD untuk penelitian arsitektur prosesor CHERI (Instruksi RISC yang Ditingkatkan Perangkat Keras Kemampuan), diperbarui untuk mendukung prosesor ARM Morello yang akan datang, yang akan mendukung sistem kontrol akses memori CHERI berdasarkan model keamanan desain Capsicum. chip Morello sedang merencanakan rilis pada tahun 2021. Pengembang CheriBSD juga terus memantau perkembangan prototipe referensi CHERI berdasarkan arsitektur MIPS;
    • Dukungan yang diperluas untuk chip RockChip RK3399 yang digunakan pada papan RockPro64 dan NanoPC-T4. Peningkatan yang paling signifikan adalah dukungan untuk eMMC dan pengembangan driver baru untuk pengontrol eMMC yang digunakan di board;
    • Pekerjaan terus dilakukan untuk mengimplementasikan dukungan untuk ARM64 SoC Broadcom BCM5871X dengan prosesor ARMv8 Cortex-A57, yang ditujukan untuk digunakan di router, gateway, dan penyimpanan jaringan. Selama periode pelaporan
      Dukungan iProc PCIe telah diperluas dan kemampuan untuk menggunakan operasi kriptografi perangkat keras untuk mempercepat IPsec telah ditambahkan.
      Integrasi kode ke dalam cabang HEAD diharapkan terjadi pada kuartal keempat;

    • Ada kemajuan signifikan dalam pengembangan port FreeBSD untuk platform powerpc64. Fokusnya adalah memberikan performa berkualitas pada sistem dengan prosesor IBM POWER8 dan POWER9, namun secara opsional mendukung pengoperasian pada Apple Power Mac lama, x500, dan Amiga A1222. Cabang powerpc*/12 terus dikirimkan dengan gcc 4.2.1, dan cabang powerpc*/13 akan segera dimigrasikan ke llvm90. Dari 33306 port, 30514 berhasil dirakit;
    • Porting FreeBSD berlanjut untuk SoC NXP LS64A 1046-bit berdasarkan prosesor ARMv8 Cortex-A72 dengan mesin akselerasi pemrosesan paket jaringan terintegrasi, Ethernet 10 Gb, PCIe 3.0, SATA 3.0, dan USB 3.0. Selama periode pelaporan, dukungan untuk antarmuka jaringan USB 3.0, SD/MMC, I2C, DPAA dan GPIO diterapkan. Ada rencana untuk mendukung QSPI dan mengoptimalkan kinerja antarmuka jaringan. Penyelesaian pekerjaan dan penyertaan di cabang HEAD diharapkan pada kuartal ke-4 tahun 2019;
    • Driver ena telah diperbarui untuk mendukung adaptor jaringan ENAv2 (Elastic Network Adapter) generasi kedua yang digunakan dalam infrastruktur Elastic Compute Cloud (EC2) untuk mengatur komunikasi antar node EC2 dengan kecepatan hingga 25 Gb/s. Dukungan NETMAP telah ditambahkan dan diuji pada driver ena, dan tata letak memori telah disesuaikan untuk mengaktifkan mode LLQ di lingkungan Amazon EC2 A1;
  • Aplikasi dan sistem port
    • Komponen tumpukan grafis yang diperbarui dan port terkait xorg. Port yang menggunakan USE_XORG dan XORG_CAT telah dipindahkan ke kerangka USES alih-alih memanggil bsd.xorg.mk melalui bsd.port.mk. Port tersebut sekarang menyertakan flag "USES=xorg" di makefile-nya. Fungsionalitas XORG_CAT telah dipisahkan dari bsd.xorg.mk dan sekarang diaktifkan oleh flag "USES=xorg-cat". Menambahkan alat untuk menghasilkan port xorg secara langsung dari repositori git
      freedesktop.org, yang, misalnya, memungkinkan Anda membuat port untuk versi yang belum dirilis. Di masa depan, kami berencana menyiapkan alat untuk menggunakan sistem perakitan meson alih-alih autotools untuk membangun port xorg.

      Pekerjaan telah dilakukan untuk membersihkan port xorg lama yang terkait dengan komponen yang tidak lagi didukung, misalnya, port x11/libXp telah dihapus, dan port x11/Xxf86misc, x11-fonts/libXfontcache dan grafis/libGLw tidak digunakan lagi ;

    • Pekerjaan telah dilakukan untuk meningkatkan dukungan untuk Java 11 dan rilis yang lebih baru di FreeBSD, serta untuk mem-porting beberapa perubahan ke cabang Java 8. Setelah dukungan untuk fitur Java 11 baru seperti Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger diimplementasikan untuk FreeBSD, DTrace, Javac Server, Java Sound, dan SCTP, pekerjaan dialihkan untuk memastikan bahwa semua uji kompatibilitas lulus. Jumlah kegagalan saat lulus tes telah dikurangi dari 50 menjadi 2;
    • Desktop KDE Plasma, Kerangka KDE, Aplikasi KDE dan Qt selalu diperbarui dan diperbarui ke rilis terbaru;
    • Port dengan desktop Xfce diperbarui untuk dirilis 4.14;
    • Pohon port FreeBSD telah melampaui 38000 port, jumlah PR yang belum ditutup sedikit di atas 2000, dimana 400 PR belum terselesaikan. Selama periode pelaporan, 7340 perubahan dilakukan oleh 169 pengembang. Dua peserta baru (Santhosh Raju dan Dmitri Goutnik) menerima hak komit. Rilis baru manajer paket pkg 1.12 telah diterbitkan, dengan dukungan untuk overlay di pohon port dan pembersihan bsd.sites.mk. Di antara pembaruan versi signifikan pada port adalah: Lazarus 2.0.4, LLVM 9.0, Perl5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
    • Pengembangan proyek terus berlanjut KlonOS, mengembangkan distribusi khusus untuk menyebarkan infrastruktur server virtual. Dalam hal tugas yang diselesaikannya, ClonOS menyerupai sistem seperti Proxmox, Triton (Joyent), OpenStack, OpenNebula dan Amazon AWS, perbedaan utamanya adalah penggunaan FreeBSD dan kemampuan untuk mengelola, menyebarkan, dan mengelola kontainer Penjara FreeBSD dan lingkungan virtual berdasarkan hypervisor Bhyve dan Xen. Perubahan terkini mencakup dukungan
      cloud-init untuk VM Linux/BSD dan cloudbase-init untuk VM Windows, memulai transisi untuk menggunakan image asli, menggunakan Jenkins CI untuk pengujian build dan repositori pkg baru untuk instalasi
      ClonOS dari paket.

Sumber: opennet.ru

Tambah komentar