FreeBSD Development Report Q2019 XNUMX

Nai-publish ulat sa pagbuo ng proyekto ng FreeBSD mula Hulyo hanggang Setyembre 2019. Kasama sa mga pagbabago ang:

  • Pangkalahatan at mga tanong sa sistema
    • Karaniwang inaprubahan ng Core team ang pagsasama ng BSD-licensed code na may karagdagang patent agreement (BSD+Patent), ngunit ang desisyon na isama ang bawat bahagi sa ilalim ng lisensyang ito sa system ay dapat na aprubahan nang hiwalay;
    • Ang unang pagpupulong ng grupong nagtatrabaho na nilikha upang isakatuparan ang paglipat ng mga source code mula sa sentralisadong sistema ng pamamahala ng source code Ang pagbabagsak sa desentralisadong sistemang Git ay naganap. Ang talakayan tungkol sa pagiging angkop ng paglipat ay patuloy pa rin, at maraming isyu ang nananatiling mapagpasyahan (halimbawa, kung paano haharapin ang contrib/, kung muling bubuo ng mga hash sa kasalukuyang git repository, at kung paano pinakamahusay na ipatupad ang commit testing);
    • Mula sa NetBSD ported ang toolkit ng KCSAN (Kernel Concurrency Sanitizer), na nagbibigay-daan sa iyong makita ang paglitaw ng mga kondisyon ng lahi sa pagitan ng mga kernel thread na tumatakbo sa iba't ibang mga CPU;
    • Ginagawa ang trabaho upang gamitin ang built-in na assembler (IAS) ng Clang sa halip na ang assembler mula sa GNU binutils;
    • Ang Linux environment emulation infrastructure (Linuxulator) ay inangkop para gumana sa ARM64 architecture. Naipatupad na ang "renameat2" system call. Ang strace utility ay napabuti upang masuri ang mga problema sa Linux executables na tumatakbo sa Linuxulator. Inayos ang pag-crash kapag nagli-link ng mga executable sa sariwang glibc. Ang mga port na may mga bahagi ng Linux para sa Linuxulator ay na-update sa CentOS 7.7;
    • Bilang bahagi ng Google Summer of Code program, matagumpay na nakumpleto ng mga mag-aaral ang anim na proyekto: isang pagpapatupad ng isang pinag-isang (IPv4 / IPv6) ping utility ay inihanda, mga tool ay binuo para sa pagsubok ng mga firewall at pag-detect ng mga error sa kernel (Kernel sanitizer), isang mac_ipacl ang module ay iminungkahi, at ang code ay isinulat upang i-compress ang virtual memory at ang trabaho ay ginawa upang paghiwalayin ang proseso ng pagbuo ng mga port mula sa lokal na pag-install;
    • Isang proyekto para ma-fuzz test ang FreeBSD kernel gamit ang system syzkaller. Sa panahon ng pag-uulat, sa tulong ng syzkaller, higit sa sampung error ang natukoy at inalis. Upang patakbuhin ang syzkaller sa mga virtual machine batay sa bhyve, isang hiwalay na server ang inilalaan, at ginagamit
      Sinusuri ng syzbot ang iba't ibang mga subsystem ng FreeBSD sa imprastraktura ng Google. Ang paglipat ng impormasyon tungkol sa lahat ng mga pag-crash sa backtrace.io na serbisyo ay isinaayos upang pasimplehin ang kanilang pagpapangkat at pagsusuri;

    • Ang trabaho ay isinasagawa upang i-update ang pagpapatupad ng zlib sa antas ng kernel.
      Ang code na nauugnay sa compression ay inilipat mula sa zlib 1.0.4, na inilabas mahigit 20 taon na ang nakalipas, sa kasalukuyang zlib 1.2.11 codebase. Ang compress, compress2, at uncompress function ay idinagdag sa kernel upang pag-isahin ang access sa zlib. Ang code na nagbibigay ng PPP protocol mula sa netgraph subsystem ay inilipat upang gamitin ang sistema ng pagpapatupad ng zlib, sa halip na ang katutubong edisyon ng library na ito. Ang mga subsystem na kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
      if_mxge, bxe updated at ng_deflate;

    • Ang isang bagong kernel interface ay binuo sysctinfo, na nagpapahintulot sa iyo na makahanap ng mga elemento sa base ng parameter ng sysctl, na naproseso sa anyo ng isang MIB (Base ng Impormasyon sa Pamamahala), at maglipat ng impormasyon tungkol sa mga bagay sa espasyo ng gumagamit.
  • katiwasayan
    • Binuo ang kernel module mac_ipacl, na batay sa TrustedBSD MAC Framework at nagpapatupad ng access control system sa mga setting ng stack ng network para sa mga jail environment. Halimbawa, gamit ang mac_ipacl, maaaring pigilan ng isang host system administrator ang root user sa isang jail environment mula sa pagbabago o pagtatakda ng mga IP address o mga setting ng subnet para sa ilang partikular na interface ng network. Iminungkahing Mandatory Access Control System ay nagbibigay-daan sa magtakda ng mga listahan ng mga IP address at subnet na pinapayagan para sa Jail, ipagbawal ang pag-install ng ilang IP at subnet sa Jail, o paghigpitan ang mga pagbabago ng parameter para lamang sa ilang interface ng network;
    • Nag-donate ang Intel ng software stack port sa proyekto TPM 2.0 (Trusted Platform Module) para sa pakikipag-ugnayan sa secure na computing chip, na kadalasang ginagamit para sa na-verify na pag-boot ng firmware at OS bootloader. Ang mga bahagi ng stack ay ibinibigay sa anyo ng mga securtity/tpm2-tss, security/tpm2-tools, at security/tpm2-abrmd port. Ang tpm2-tss port ay may kasamang mga aklatan para sa paggamit ng TPM2 API, ang tpm2-tools ay nagbibigay ng mga command-line utility para sa pagsasagawa ng mga pagpapatakbo ng TPM, at ang tpm2-abrmd ay naglalaman ng isang proseso sa background na nagpapatupad ng mga bahagi ng TPM Access Broker at Resource Manager na hinihiling ng multiplex mula sa iba't ibang TPM mga user sa iisang device . Bilang karagdagan sa na-verify na boot sa FreeBSD, maaaring gamitin ang TPM upang mapahusay ang seguridad ng Strongswan IPsec, SSH, at TLS sa pamamagitan ng pagsasagawa ng mga cryptographic na operasyon sa isang hiwalay na chip;
    • Ang kernel para sa arkitektura ng amd64 ay iniangkop upang mai-load gamit ang W^X (write XOR execute) na pamamaraan ng proteksyon, na nagpapahiwatig na ang mga pahina ng memorya ay hindi maaaring sabay na magagamit para sa pagsulat at pagpapatupad (ang kernel ay maaari na ngayong i-load gamit ang mga executable memory page kung saan hindi pinagana ang pagsulat). Ang bagong paraan ng proteksyon ng kernel ay kasama sa HEAD branch at magiging bahagi ng FreeBSD 13.0 at 12.2 release;
    • Para sa mmap at mprotect system calls ipinatupad ang PROT_MAX() macro, na nagbibigay-daan upang matukoy ang hanay ng mga flag ng paghihigpit sa pag-access (PROT_READ, PROT_WRITE, PROT_EXEC) na wasto para sa karagdagang mga pagbabago. Gamit ang PROT_MAX(), maaaring ipagbawal ng developer ang paglipat ng isang memory area sa executable na kategorya o humiling ng memorya na hindi pinapayagan ang execution, ngunit maaaring ilipat sa executable sa ibang pagkakataon. Halimbawa, ang isang lugar ng memorya ay maaaring bukas para sa pagsulat lamang sa tagal ng dynamic na pag-link o pagbuo ng JIT code, ngunit pagkatapos makumpleto ang pagsulat, ito ay limitado lamang sa pagbabasa at pagpapatupad, at sa hinaharap, kung sakaling magkaroon ng kompromiso. , hindi papayagan ng umaatake ang pagsusulat para sa memory block na ito. Bilang karagdagan sa PROT_MAX(), ipinapatupad din ang sysctl vm.imply_prot_max, na, kapag na-activate, tinutukoy ang hanay ng mga wastong flag batay sa mga paunang parameter ng unang mmap na tawag;
    • Upang palakasin ang proteksyon laban sa pagsasamantala sa mga kahinaan, bilang karagdagan sa pamamaraan ng address space randomization (ASLR), iminungkahi ang isang mekanismo para sa randomizing offset ng mga pointer na tumutugon sa paunang stack frame at mga istrukturang inilagay sa stack na may impormasyon tungkol sa kapaligiran, mga parameter ng paglulunsad ng programa, at data para sa mga executable na larawan sa ELF format;
    • Ang trabaho ay ginawa upang alisin ang hindi ligtas na gets function mula sa libc (simula sa pamantayan ng C11, ang function na ito ay hindi kasama sa detalye) at upang itama ang mga port na gumagamit pa rin ng function na ito. Ang pagbabago ay binalak na ialok sa FreeBSD 13.0;
    • Isang pilot project ang inilunsad upang lumikha ng mga tool para sa pagsasaayos ng mga kapaligiran ng kulungan batay sa balangkas palayok para sa paglikha at pag-export ng mga imahe, na ipinatupad nang katulad sa Docker, at isang driver nomad, na nagbibigay ng interface para sa dynamic na paglulunsad ng mga application sa isang kapaligiran ng kulungan. Ang iminungkahing modelo ay nagbibigay-daan sa paghiwalayin ang mga proseso ng paglikha ng mga kapaligiran ng kulungan at pag-deploy ng mga aplikasyon sa mga ito. Ang isa sa mga layunin ng proyekto ay magbigay ng paraan upang manipulahin ang mga kulungan tulad ng mga lalagyan na may istilong Docker;
  • Storage at mga file system
    • Mula sa NetBSD hanggang sa "makefs" na utility na-reschedule suporta para sa FAT file system (msdosfs). Ang mga inihandang pagbabago ay nagbibigay-daan sa iyo upang lumikha ng mga imahe ng FS na may FAT nang hindi gumagamit ng md driver at walang mga pribilehiyo sa ugat;
    • Ang FUSE (File system in USErspace) subsystem driver ay muling ginawa, na nagbibigay-daan sa paglikha ng mga pagpapatupad ng mga file system sa espasyo ng gumagamit. Ang driver na orihinal na ipinadala ay naglalaman ng maraming mga bug at batay sa FUSE 7.8 na inilabas 11 taon na ang nakakaraan. Bilang bahagi ng proyekto ng modernisasyon ng driver, ipinatupad ang suporta sa FUSE 7.23 protocol, idinagdag ang code upang suriin ang mga pahintulot sa gilid ng kernel ("-o default_permissions"), idinagdag ang mga tawag sa VOP_MKNOD, VOP_BMAP at VOP_ADVLOCK, ang kakayahang matakpan ang mga operasyon ng FUSE ay idinagdag, ang suporta para sa mga hindi pinangalanang pipe at unix socket ay idinagdag sa mga fusef, naging posible na gumamit ng kqueue para sa /dev/fuse, ang pag-update ng mga parameter ng mount sa pamamagitan ng "mount -u" ay pinayagan, ang suporta para sa pag-export ng mga fusef sa pamamagitan ng NFS ay idinagdag, ang RLIMIT_FSIZE accounting ay ipinatupad, idinagdag ang mga flag ng FOPEN_KEEP_CACHE at FUSE_ASYNC_READ, ginawa ang mga makabuluhang pag-optimize sa pagganap at pinahusay ang organisasyon ng pag-cache. Ang bagong driver ay kasama sa head at stable/12 branches (kasama sa FreeBSD 12.1);
    • Ang pagpapatupad ng NFSv4.2 (RFC-7862) para sa FreeBSD ay halos kumpleto na. Sa panahon ng pag-uulat, nakatuon ang pansin sa pagsubok. Nakumpleto na ang mga pagsubok sa pagiging tugma sa pagpapatupad ng Linux, ngunit nagpapatuloy pa rin ang pagsubok sa server ng pNFS na may NFSv4.2. Sa pangkalahatan, ang code ay itinuturing na handa na para sa pagsasama sa ulo/kasalukuyang sangay ng FreeBSD. Ang bagong bersyon ng NFS ay nagdaragdag ng suporta para sa posix_fadvise, posix_fallocate function, SEEKHOLE/SEEKDATA mode sa lseek, lokal na pagkopya ng mga bahagi ng file sa server (nang walang paglilipat sa kliyente);
  • Suporta sa Hardware
    • Nagsimula ng isang proyekto upang mapabuti ang FreeBSD sa mga laptop. Ang unang device na na-audit para sa suporta sa hardware sa FreeBSD ay ang ikapitong henerasyon na Lenovo X1 Carbon laptop;
    • CheriBSD, isang tinidor ng FreeBSD para sa arkitektura ng processor ng pananaliksik CHERI (Capability Hardware Enhanced RISC Instructions), na-update upang suportahan ang paparating na ARM Morello processor, na susuportahan ang memory access control system ng CHERI batay sa modelo ng seguridad ng Capsicum. Morello chip ay nagpaplano ipalabas sa 2021. Patuloy ding sinusubaybayan ng mga developer ng CheriBSD ang pagbuo ng reference na prototype ng CHERI batay sa arkitektura ng MIPS;
    • Pinalawak na suporta para sa RockChip RK3399 chips na ginagamit sa RockPro64 at NanoPC-T4 boards. Ang pinaka makabuluhang pagpapabuti ay ang suporta sa eMMC at ang pagbuo ng isang bagong driver para sa eMMC controller na ginamit sa board;
    • Nagpatuloy ang trabaho sa pagpapatupad ng suporta para sa ARM64 SoC Broadcom BCM5871X na may mga processor ng ARMv8 Cortex-A57 na naglalayong gamitin sa mga router, gateway, at NAS. Sa panahon ng pag-uulat
      pinalawak na suporta para sa iProc PCIe at idinagdag ang kakayahang gumamit ng mga operasyong cryptographic ng hardware upang mapabilis ang IPsec.
      Ang pagsasama ng code sa sangay ng HEAD ay inaasahan sa ikaapat na quarter;

    • Malaking pag-unlad ang nagawa sa pagbuo ng FreeBSD port para sa powerpc64 platform. Ang focus ay sa pagbibigay ng kalidad na pagganap sa mga system na may IBM POWER8 at POWER9 processor, ngunit opsyonal na sinusuportahan sa mas lumang Apple Power Mac, x500 at Amiga A1222. Ang powerpc*/12 branch ay patuloy na nagpapadala gamit ang gcc 4.2.1, at ang powerpc*/13 branch ay malapit nang i-migrate sa llvm90. Sa 33306 port, 30514 ang matagumpay na na-assemble;
    • Nagpatuloy ang pag-port ng FreeBSD sa NXP LS64A 1046-bit SoC batay sa ARMv8 Cortex-A72 processor na may pinagsamang network packet processing acceleration engine, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 at USB 3.0. Sa panahon ng pag-uulat, ipinatupad ang suporta para sa USB 3.0, SD / MMC, I2C, DPAA network interface at GPIO. Plano naming suportahan ang QSPI at i-optimize ang pagganap ng interface ng network. Ang pagkumpleto at pagsasama sa sangay ng HEAD ay inaasahan sa Q4 2019;
    • Na-update ang driver ng ena upang suportahan ang pangalawang henerasyon ng mga network adapter ng ENAv2 (Elastic Network Adapter) na ginagamit sa imprastraktura ng Elastic Compute Cloud (EC2) upang ayusin ang komunikasyon sa pagitan ng mga EC2 node sa bilis na hanggang 25 Gb/s. Idinagdag at sinubukan ang suporta sa NETMAP sa driver ng ena, at inayos ang layout ng memorya upang paganahin ang LLQ mode sa mga kapaligiran ng Amazon EC2 A1;
  • Mga application at port system
    • Mga na-update na graphics stack na bahagi at port na nauugnay sa xorg. Ang mga port na gumagamit ng USE_XORG at XORG_CAT ay inilipat sa USES framework sa halip na tumawag sa bsd.xorg.mk sa pamamagitan ng bsd.port.mk. Kasama na sa mga naturang port ang flag na "USES=xorg" sa kanilang mga makefile. Ang XORG_CAT functionality ay nakuha mula sa bsd.xorg.mk at pinagana na ngayon gamit ang flag na "USES=xorg-cat". Nagdagdag ng mga tool para sa direktang pagbuo ng mga xorg port mula sa isang git repository
      freedesktop.org, na, halimbawa, ay nagbibigay-daan sa iyong bumuo ng mga port para sa mga bersyon na hindi pa nailalabas. Sa hinaharap, pinlano na maghanda ng toolkit para gamitin ang meson build system sa halip na mga autotools para bumuo ng mga xorg port.

      Ang trabaho ay ginawa upang linisin ang mga lumang xorg port na nakatali sa mga bahagi na hindi na suportado, tulad ng pag-alis ng x11/libXp port at pagtanggal sa x11/Xxf86misc, x11-fonts/libXfontcache at graphics/libGLw port;

    • Ang trabaho ay ginawa upang mapabuti ang suporta para sa Java 11 at mas bagong mga release sa FreeBSD, at upang i-port ang ilang mga pagbabago sa Java 8 branch. Dahil ang FreeBSD ay nagpatupad ng suporta para sa mga bagong tampok ng Java 11 tulad ng Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger , Ang DTrace, Javac Server, Java Sound at SCTP, ay lumipat sa trabaho upang matiyak na ang lahat ng pagsusulit sa compatibility ay pumasa. Ang bilang ng mga pagkabigo kapag pumasa sa mga pagsusulit ay nabawasan mula 50 hanggang 2;
    • Ang KDE Plasma desktop, KDE Frameworks, KDE Applications at Qt ay pinananatiling napapanahon at na-update sa mga pinakabagong release;
    • Ang mga port na may Xfce desktop ay na-update upang ilabas 4.14;
    • Ang FreeBSD ports tree ay nakapasa sa milestone ng 38000 port, ang bilang ng mga bukas na PR ay bahagyang higit sa 2000, kung saan 400 PR ay nakabinbin pa rin. Sa panahon ng pag-uulat, 7340 pagbabago ang ginawa ng 169 na developer. Dalawang bagong kontribyutor (Santhosh Raju at Dmitri Goutnik) ang nakakuha ng mga karapatan sa committer. Ang isang bagong release ng pkg 1.12 package manager ay nai-publish na may suporta para sa mga overlay sa ports tree at paglilinis ng bsd.sites.mk. Ang mga makabuluhang update sa bersyon sa mga port ay kinabibilangan ng: 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;
    • Patuloy ang pagbuo ng proyekto ClonOS, umuunlad isang espesyal na distribution kit para sa pag-deploy ng isang virtual na imprastraktura ng server. Sa mga tuntunin ng mga gawaing dapat lutasin, ang ClonOS ay kahawig ng mga system tulad ng Proxmox, Triton (Joyent), OpenStack, OpenNebula at Amazon AWS, ang pangunahing pagkakaiba kung saan ay ang paggamit ng FreeBSD at ang kakayahang pamahalaan, i-deploy at pamahalaan ang mga lalagyan ng FreeBSD Jail at mga virtual na kapaligiran batay sa Bhyve at Xen hypervisors . Sa mga kamakailang pagbabago, mayroong suporta
      cloud-init para sa Linux/BSD VM at cloudbase-init para sa Windows VM, simula ng paglipat sa mga native na imahe, paggamit ng Jenkins CI para sa pagsubok ng build at bagong pkg repository para sa pag-install
      ClonOS mula sa mga pakete.

Pinagmulan: opennet.ru

Magdagdag ng komento