2020๋…„ XNUMX๋ถ„๊ธฐ FreeBSD ๊ฐœ๋ฐœ ๋ณด๊ณ ์„œ

๊ฒŒ์‹œ ๋จ 2020๋…„ XNUMX์›”๋ถ€ํ„ฐ XNUMX์›”๊นŒ์ง€์˜ FreeBSD ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ๋ณด๊ณ ์„œ์ž…๋‹ˆ๋‹ค. ์ฃผ๋ชฉํ•  ๋งŒํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜ ๋ฐ ์‹œ์Šคํ…œ ์งˆ๋ฌธ
    • FreeBSD-CURRENT ์†Œ์Šค ํŠธ๋ฆฌ์—์„œ GCC ์ปดํŒŒ์ผ๋Ÿฌ ์„ธํŠธ์™€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” gperf, gcov ๋ฐ gtc(์žฅ์น˜ ํŠธ๋ฆฌ ์ปดํŒŒ์ผ๋Ÿฌ) ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. Clang์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์€ ํฌํŠธ์—์„œ ์„ค์น˜๋œ ์™ธ๋ถ€ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์€ GCC 4.2.1์˜ ์˜ค๋ž˜๋œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ถœ์‹œํ–ˆ์œผ๋ฉฐ 4.2.2๊ฐ€ FreeBSD ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ์— ๋ถ€์ ์ ˆํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผ๋˜๋Š” GPLv3 ๋ผ์ด์„ผ์Šค๋กœ ์ „ํ™˜๋˜์–ด ์ตœ์‹  ๋ฒ„์ „์˜ ํ†ตํ•ฉ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. GCC 9๋ฅผ ํฌํ•จํ•œ ํ˜„์žฌ GCC ๋ฆด๋ฆฌ์Šค๋Š” ์—ฌ์ „ํžˆ ํŒจํ‚ค์ง€์™€ ํฌํŠธ์—์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Linux ํ™˜๊ฒฝ ์—๋ฎฌ๋ ˆ์ด์…˜ ์ธํ”„๋ผ(Linuxulator)์—๋Š” sendfile ์‹œ์Šคํ…œ ํ˜ธ์ถœ, TCP_CORK ๋ชจ๋“œ(nginx์— ํ•„์š”) ๋ฐ MAP_32BIT ํ”Œ๋ž˜๊ทธ(Ubuntu Bionic์—์„œ Mono๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ)์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 2.30๋ณด๋‹ค ์ตœ์‹ ์ธ glibc(์˜ˆ: CentOS 8)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” DNS ํ™•์ธ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
      ์ง€์†์ ์ธ ํ†ตํ•ฉ ์ธํ”„๋ผ๋Š” Linuxulator๋ฅผ ์‹คํ–‰ํ•˜๋Š” LTP(Linux ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ) ์ž‘์—…์„ ์‹คํ–‰ํ•˜์—ฌ Linux๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ๊ฐœ์„  ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์•ฝ 400๊ฐœ์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๊ณ  ์ˆ˜์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์˜ค๋ฅ˜๋Š” ์ž˜๋ชป๋œ ๊ธ์ •์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๊ณ  ์ผ๋ถ€๋Š” ์‚ฌ์†Œํ•œ ์ˆ˜์ •์ด ํ•„์š”ํ•˜์ง€๋งŒ ์ˆ˜์ •์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Linuxulator ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋””๋ฒ„๊น…์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ™•์žฅ๋œ ์†์„ฑ๊ณผ fexecve ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ง€์›ํ•˜๋Š” ํŒจ์น˜๊ฐ€ ์ค€๋น„๋˜์—ˆ์ง€๋งŒ ์•„์ง ๊ฒ€ํ† ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

    • ์ค‘์•™ ์ง‘์ค‘์‹ ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ Subversion์—์„œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ Git์œผ๋กœ ์†Œ์Šค ์ฝ”๋“œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž‘์—… ๊ทธ๋ฃน ํšŒ์˜๊ฐ€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ œ์•ˆ์ด ํฌํ•จ๋œ ๋ณด๊ณ ์„œ๊ฐ€ ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค.
    • ะ’ RTLD (๋Ÿฐํƒ€์ž„ ๋ง์ปค) ์ง์ ‘ ์‹คํ–‰ ๋ชจ๋“œ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค("/libexec/ld-elf.so.1 {๊ฒฝ๋กœ} {์ธ์ˆ˜}").
    • syzkaller ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ FreeBSD ์ปค๋„์„ ํผ์ง• ํ…Œ์ŠคํŠธํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณ„์†ํ•ด์„œ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ  ๊ธฐ๊ฐ„ ๋™์•ˆ syzkaller๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹๋ณ„๋œ ํŒŒ์ผ ์„ค๋ช…์ž ํ…Œ์ด๋ธ” ์ž‘์—…์„ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ ์Šคํƒ ๋ฐ ์ฝ”๋“œ์˜ ๋ฌธ์ œ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ง„๋‹จ์— ๋”ฐ๋ผ SCTP ์Šคํƒ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋˜์–ด ๋””๋ฒ„๊น…์ด ๋” ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํšŒ๊ท€๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์ŠคํŠธ๋ ˆ์Šค2 ์„ธํŠธ์— ๊ทœ์น™์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. copy_file_range(), __realpathat() ๋ฐ Capsicum ํ•˜์œ„ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํฌํ•จํ•œ ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์˜ ํผ์ง€ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํผ์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด Linux ์—๋ฎฌ๋ ˆ์ด์…˜ ๊ณ„์ธต์„ ๋‹ค๋ฃจ๋Š” ์ž‘์—…์ด ๊ณ„์† ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ตœ์‹  Coverity Scan ๋ณด๊ณ ์„œ์— ์–ธ๊ธ‰๋œ ์˜ค๋ฅ˜๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ง€์†์  ํ†ตํ•ฉ ์‹œ์Šคํ…œ์€ clang/lld๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ํ—ค๋“œ ๋ธŒ๋žœ์น˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. RISC-V๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ OpenSBI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ QEMU์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์™„์ „ํ•œ ๋””์Šคํฌ ์ด๋ฏธ์ง€์˜ ํ˜•์„ฑ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๋ฐ powerpc64 ๊ฐ€์ƒ ๋จธ์‹ ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์ž‘์—…์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ด ์ˆ˜ํ–‰๋˜๋Š” ์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ฒ˜์—์„œ Kyua๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ(ํŒจํ‚ค์ง€๊ฐ€ ๋งค์šฐ ๋Š๋ฆฌ๊ฒŒ ์„ค์น˜๋จ)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Kyua ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์„ ํฌํŠธ(devel/kya)์—์„œ ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์œผ๋กœ ์ „์†กํ•˜๋Š” ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. FPGA. ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉํ•˜๋ฉด ์ž„๋ฒ ๋””๋“œ ํ”Œ๋žซํผ ํ…Œ์ŠคํŠธ์™€ ์ง€์†์ ์ธ ํ†ตํ•ฉ ์‹œ์Šคํ…œ๊ณผ์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”๋ฉ๋‹ˆ๋‹ค.
    • ๋„คํŠธ์›Œํฌ ๋ธŒ๋ฆฌ์ง€ ๋“œ๋ผ์ด๋ฒ„์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. if_bridge๋‹จ์ผ ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž ๊ทธ๋Š” ๋ฐฉ์‹์œผ๋กœ, ๊ฐ์˜ฅ ํ™˜๊ฒฝ์ด ๋งŽ์€ ์‹œ์Šคํ…œ์ด๋‚˜ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ์— ํ†ตํ•ฉ๋œ ๊ฐ€์ƒ ๋จธ์‹ ์ด ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” ์›ํ•˜๋Š” ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ž ๊ธˆ ์ž‘์—…์„ ํ˜„๋Œ€ํ™”ํ•˜๋Š” ๋™์•ˆ ํšŒ๊ท€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ฝ”๋“œ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ConcurrencyKit์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „์†ก ํ•ธ๋“ค๋Ÿฌ(bridge_input(), bridge_output(), bridge_forward(), ...)๋ฅผ ๋ณ‘๋ ฌํ™”ํ•˜๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ๊ณ ๋ ค๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์Šค๋ ˆ๋“œ๊ฐ€ ๋น ๋ฅธ ์‹ ํ˜ธ ์ฒ˜๋ฆฌ๊ธฐ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ƒˆ๋กœ์šด sigfastblock ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ปค๋„์€ ARMv8.1 ์‹œ์Šคํ…œ์—์„œ ์ง€์›ํ•˜๋Š” LSE(Large System Extension) ์›์ž ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ง€์นจ์€ Cavium ThunderX2 ๋ฐ AWS Graviton 2 ๋ณด๋“œ์—์„œ ์‹คํ–‰ํ•  ๋•Œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ LSE ์ง€์›์„ ๊ฐ์ง€ํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์›์ž์  ๊ตฌํ˜„์„ โ€‹โ€‹๋™์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธํ•˜๋Š” ๋™์•ˆ LSE๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปค๋„์„ ์กฐ๋ฆฝํ•˜๋Š” ๋ฐ ์†Œ์š”๋˜๋Š” ํ”„๋กœ์„ธ์„œ ์‹œ๊ฐ„์„ 15% ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    • ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ˆ˜ํ–‰๋˜์—ˆ์œผ๋ฉฐ ํˆดํ‚ท์˜ ๊ธฐ๋Šฅ์ด ELF ํ˜•์‹์˜ ์‹คํ–‰ ํŒŒ์ผ์— ๋Œ€ํ•ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
      DWARF ๋””๋ฒ„๊น… ์ •๋ณด ์บ์‹ฑ์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€, elfcopy/objcopy ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ, DW_AT_ranges ์ฒ˜๋ฆฌ ์ถ”๊ฐ€,
      readelf๋Š” Xen ๋ฐ GNU Build-ID๋ฟ๋งŒ ์•„๋‹ˆ๋ผ PROTMAX_DISABLE, STKGAP_DISABLE ๋ฐ WXNEEDED ํ”Œ๋ž˜๊ทธ๋ฅผ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ
    • Azure ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ FreeBSD์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ๊ณผ ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•ด ์†Œ์ผ“ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” HyperV ์†Œ์ผ“ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
    • FreeBSD์˜ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์‹คํ–‰ ํŒŒ์ผ์ด ์„ ์–ธ๋œ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์ •ํ™•ํ•˜๊ฒŒ ์ปดํŒŒ์ผ๋˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐœ๋ณ„ ํ”„๋กœ์„ธ์Šค ์ˆ˜์ค€์—์„œ ์ถ”๊ฐ€ ๋ณดํ˜ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜(ASLR, PROT_MAX, ์Šคํƒ ๊ฐญ, W+X ๋งคํ•‘) ํฌํ•จ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ธฐ๋Šฅ์ด elfctl ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ
    • RPC ๋ฉ”์‹œ์ง€๋งŒ ์•”ํ˜ธํ™”ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ œํ•œ๋˜๊ณ  ์†Œํ”„ํŠธ์›จ์–ด์—์„œ๋งŒ ๊ตฌํ˜„๋˜๋Š” Kerberos(sec=krb1.3p ๋ชจ๋“œ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  TLS 5 ๊ธฐ๋ฐ˜์˜ ์•”ํ˜ธํ™”๋œ ํ†ต์‹  ์ฑ„๋„์„ ํ†ตํ•ด NFS๊ฐ€ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ตฌํ˜„์—์„œ๋Š” ์ปค๋„ ์ œ๊ณต TLS ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. TLS๋ฅผ ํ†ตํ•œ NFS ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ ์ค€๋น„๊ฐ€ ๊ฑฐ์˜ ์™„๋ฃŒ๋˜์—ˆ์ง€๋งŒ ์„œ๋ช…๋œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ์ง€์›ํ•˜๊ณ  NFS ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„ TLS ์Šคํƒ์„ ์กฐ์ •ํ•˜๋Š” ์ž‘์—…์ด ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์ˆ˜์‹ ์šฉ ํŒจ์น˜๋Š” ์ด๋ฏธ ์ค€๋น„๋˜์–ด ์žˆ์Œ).
  • ํ•˜๋“œ์›จ์–ด ์ง€์›
    • AMD ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ค‘๊ตญ x86 CPU Hygon์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
    • ์—ฐ๊ตฌ์šฉ ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•œ FreeBSD์˜ ํฌํฌ์ธ CheriBSD์˜ ์ผ๋ถ€ ์ฒด๋ฆฌ (Capability Hardware Enhanced RISC Instructions) ARM Morello ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ง€์›์ด ๊ณ„์† ๊ตฌํ˜„๋˜์–ด Capsicum ํ”„๋กœ์ ํŠธ ๋ณด์•ˆ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” CHERI ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค ์ œ์–ด ์‹œ์Šคํ…œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ ๋กœ ์นฉ ๊ณ„ํšํ•˜๊ณ ์žˆ๋‹ค. 2021๋…„ ์ถœ์‹œ. ํ˜„์žฌ ์ž‘์—…์€ Morello๋ฅผ ์ง€์›ํ•˜๋Š” Arm Neoverse N1 ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. RISC-V ์•„ํ‚คํ…์ฒ˜์šฉ CheriBSD์˜ ์ดˆ๊ธฐ ํฌํŠธ๊ฐ€ ์ œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. MIPS64 ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” CHERI ์ฐธ์กฐ ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•œ CheriBSD ๊ฐœ๋ฐœ์ด ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.
    • ํ†ตํ•ฉ ๋„คํŠธ์›Œํฌ ํŒจํ‚ท ์ฒ˜๋ฆฌ ๊ฐ€์† ์—”์ง„, 64Gb ์ด๋”๋„ท, PCIe 1046, SATA 8 ๋ฐ USB 72์„ ๊ฐ–์ถ˜ ARMv10 Cortex-A3.0 ํ”„๋กœ์„ธ์„œ ๊ธฐ๋ฐ˜ 3.0๋น„ํŠธ SoC NXP LS3.0A์— ๋Œ€ํ•œ FreeBSD ํฌํŒ…์ด ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋“œ๋ผ์ด๋ฒ„ QorIQ ๋ฐ LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI๊ฐ€ ์ฃผ์š” FreeBSD ๊ตฌ์„ฑ์œผ๋กœ์˜ ์ „์†ก์„ ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค.
    • ena ๋“œ๋ผ์ด๋ฒ„๋Š” ์ตœ๋Œ€ 2.1.1Gb/s์˜ ์†๋„๋กœ EC2 ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Elastic Compute Cloud(EC2) ์ธํ”„๋ผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” 2์„ธ๋Œ€ ENAv25(ํƒ„๋ ฅ์  ๋„คํŠธ์›Œํฌ ์–ด๋Œ‘ํ„ฐ) ๋„คํŠธ์›Œํฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฒ„์ „ 2.2.0๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—์Šค. ENA XNUMX์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค.
    • powerpc64 ํ”Œ๋žซํผ์šฉ FreeBSD ํฌํŠธ ๊ฐœ์„ ์ด ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. IBM POWER8 ๋ฐ POWER9 ํ”„๋กœ์„ธ์„œ๊ฐ€ ํƒ‘์žฌ๋œ ์‹œ์Šคํ…œ์—์„œ ๊ณ ํ’ˆ์งˆ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ  ๊ธฐ๊ฐ„ ๋™์•ˆ FreeBSD-CURRENT๋Š” GCC ๋Œ€์‹  LLVM/Clang 10.0 ์ปดํŒŒ์ผ๋Ÿฌ์™€ lld ๋ง์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ด์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ powerpc64 ์‹œ์Šคํ…œ์€ ELFv2 ABI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ELFv1 ABI์— ๋Œ€ํ•œ ์ง€์›์€ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. FreeBSD-STABLE์—๋Š” ์—ฌ์ „ํžˆ gcc 4.2.1์ด ์žˆ์Šต๋‹ˆ๋‹ค. virtio, aacraid ๋ฐ ixl ๋“œ๋ผ์ด๋ฒ„ ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. powerpc64 ์‹œ์Šคํ…œ์—์„œ๋Š” Huge Pages ์ง€์› ์—†์ด QEMU๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • RISC-V ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ง€์›์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ๊ณ„์† ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ˜•ํƒœ์—์„œ FreeBSD๋Š” ์ด๋ฏธ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ค€๋น„๋œ SiFive Hifive Unleashed ๋ณด๋“œ์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ๋ถ€ํŒ…๋ฉ๋‹ˆ๋‹ค.
      UART, SPI ๋ฐ PRCI๋Š” OpenSBI ๋ฐ SBI 0.2 ํŽŒ์›จ์–ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ณ  ๊ธฐ๊ฐ„ ๋™์•ˆ ์ž‘์—…์€ GCC์—์„œ clang ๋ฐ lld๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ์ง‘์ค‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ํฌํŠธ ์‹œ์Šคํ…œ
    • FreeBSD ํฌํŠธ ์ปฌ๋ ‰์…˜์€ 39๊ฐœ์˜ ํฌํŠธ ์ž„๊ณ„๊ฐ’์„ ๋„˜์—ˆ๊ณ , ๋‹ซํžˆ์ง€ ์•Š์€ PR์˜ ์ˆ˜๋Š” 2400์„ ์•ฝ๊ฐ„ ์ดˆ๊ณผํ–ˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ 640๊ฐœ์˜ PR์€ ์•„์ง ์ •๋ ฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ  ๊ธฐ๊ฐ„ ๋™์•ˆ 8146๋ช…์˜ ๊ฐœ๋ฐœ์ž๋กœ๋ถ€ํ„ฐ 173๊ฑด์˜ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. 3๋ช…์˜ ์ƒˆ๋กœ์šด ์ฐธ๊ฐ€์ž๊ฐ€ ์ปค๋ฏธํ„ฐ ๊ถŒํ•œ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค(Loรฏc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). USES=qca ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  USES=zope ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค(Python 2.7๊ณผ์˜ ๋น„ํ˜ธํ™˜์„ฑ์œผ๋กœ ์ธํ•ด). ํฌํŠธ ํŠธ๋ฆฌ์—์„œ Python 2์„ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  Python 3 ๊ธฐ๋ฐ˜ ํฌํŠธ๋Š” Python 1.13.2์œผ๋กœ ์ด์‹๋˜์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. pkg ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ฆด๋ฆฌ์Šค XNUMX๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ทธ๋ž˜ํ”ฝ ์Šคํƒ ๊ตฌ์„ฑ์š”์†Œ ๋ฐ xorg ๊ด€๋ จ ํฌํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.
      X.org ์„œ๋ฒ„๋Š” ๋ฒ„์ „ 1.20.8(์ด์ „์—๋Š” 1.18 ๋ธŒ๋žœ์น˜์—์„œ ์ œ๊ณต๋จ)๋กœ ์—…๋ฐ์ดํŠธ๋˜์–ด FreeBSD๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž…๋ ฅ ์žฅ์น˜ ์ฒ˜๋ฆฌ์— udev/evdev ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. Mesa ํŒจํ‚ค์ง€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ DRI3 ๋Œ€์‹  DRI2 ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„, ์ž…๋ ฅ ์žฅ์น˜ ์Šคํƒ ๋ฐ drm-kmod ๊ตฌ์„ฑ ์š”์†Œ(Linux ์ปค๋„์˜ Direct Rendering Manager์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด linuxkpi ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ amdgpu, i915 ๋ฐ radeon DRM ๋ชจ๋“ˆ์˜ ์ž‘๋™์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํฌํŠธ)๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ์ •๋ณด.

    • KDE ํ”Œ๋ผ์ฆˆ๋งˆ ๋ฐ์Šคํฌํƒ‘, KDE ํ”„๋ ˆ์ž„์›Œํฌ, KDE ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ฐ Qt๋Š” ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€๋˜๊ณ  ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ kstars(์Šคํƒ€ ์•„ํ‹€๋ผ์Šค)๊ฐ€ ํฌํŠธ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • Xfce๋ฅผ ๋ฒ„์ „ 4๋กœ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ๋‚˜ํƒ€๋‚˜๋Š” xfwm4.14 ์ฐฝ ๊ด€๋ฆฌ์ž์—์„œ ํšŒ๊ท€์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ฐฝ์„ ์žฅ์‹ํ•  ๋•Œ ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚จ).
    • Wine ํฌํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์–ด Wine 5.0์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด์ „์—๋Š” 4.0.3์ด ์ œ๊ณต๋จ).
    • ๋ฒ„์ „ 1.14๋ถ€ํ„ฐ Go ์–ธ์–ด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” FreeBSD 64์šฉ ARM12.0 ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ๊ณต์‹ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์˜ OpenSSH๊ฐ€ 7.9p1 ๋ฆด๋ฆฌ์Šค๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • sysctlmibinfo2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ํฌํŠธ(devel/libsysctlmibinfo2)์— ๋ฐฐ์น˜๋˜์–ด sysctl MIB์— ์•ก์„ธ์Šคํ•˜๊ณ  sysctl ์ด๋ฆ„์„ ๊ฐ์ฒด ์‹๋ณ„์ž(OID)๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฐํฌํŒ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๋…ธ๋งˆ๋“œBSD 1.3.1๋Š” USB ๋“œ๋ผ์ด๋ธŒ์—์„œ ๋ถ€ํŒ… ๊ฐ€๋Šฅํ•œ ํœด๋Œ€์šฉ ๋ฐ์Šคํฌํƒ‘์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์กฐ์ •๋œ FreeBSD ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์€ ์ฐฝ ๊ด€๋ฆฌ์ž๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆ ๋ฐ•์Šค. ๋“œ๋ผ์ด๋ธŒ ์žฅ์ฐฉ์— ์‚ฌ์šฉ DSBMD (CD9660, FAT, HFS+, NTFS, Ext2/3/4 ๋งˆ์šดํŠธ ์ง€์›), ๋ฌด์„  ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ - wifimgr, ๊ทธ๋ฆฌ๊ณ  ๋ณผ๋ฅจ์„ ์กฐ์ ˆํ•˜๋ ค๋ฉด - DSBMixer.
    • ์‹œ์ž‘ ์ผ ๊ฐ์˜ฅ ํ™˜๊ฒฝ ๊ด€๋ฆฌ์ž๋ฅผ ์œ„ํ•œ ์™„์ „ํ•œ ๋ฌธ์„œ ์ž‘์„ฑ์— ๋Œ€ํ•ด ์ˆ˜. ๋„คํŠธ์›Œํฌ ์Šคํƒ ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋œ Pot 0.11.0์ด ์ถœ์‹œ ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€