ToaruOS 1.14 ์šด์˜ ์ฒด์ œ ๋ฐ Kuroko 1.1 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ถœ์‹œ

์ž์ฒด ์ปค๋„, ๋ถ€ํŠธ ๋กœ๋”, ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž, ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ๋ณตํ•ฉ ์ฐฝ ๊ด€๋ฆฌ์ž๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์„ฑ๋œ Unix ๊ณ„์—ด ์šด์˜ ์ฒด์ œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ToaruOS 1.14 ํ”„๋กœ์ ํŠธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ์€ Python 3 ๋ฐ GCC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” C๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. QEMU, VMware ๋˜๋Š” VirtualBox์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” 14MB ํฌ๊ธฐ์˜ ๋ผ์ด๋ธŒ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์šด๋กœ๋“œ์šฉ์œผ๋กœ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ToaruOS 1.14 ์šด์˜ ์ฒด์ œ ๋ฐ Kuroko 1.1 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ถœ์‹œ

์ด ํ”„๋กœ์ ํŠธ๋Š” 2010๋…„ ์ผ๋ฆฌ๋…ธ์ด ๋Œ€ํ•™๊ต์—์„œ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ ์ฒ˜์Œ์—๋Š” ์ƒˆ๋กœ์šด ๋ณตํ•ฉ ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ ๋ถ„์•ผ์˜ ์—ฐ๊ตฌ ์ž‘์—…์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 2012๋…„๋ถ€ํ„ฐ ๊ฐœ๋ฐœ์€ ToaruOS ์šด์˜ ์ฒด์ œ๋กœ ์ „ํ™˜๋˜์—ˆ์œผ๋ฉฐ, ์ฒ˜์Œ์—๋Š” ํ•™์ƒ ํ”„๋กœ์ ํŠธ๋กœ ๊ฐœ๋ฐœ๋œ ํ›„ ์ฃผ๋ง ์ทจ๋ฏธ๋กœ ์„ฑ์žฅํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ˜•์„ฑ๋œ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์˜ํ•ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ˜•ํƒœ์˜ ์‹œ์Šคํ…œ์—๋Š” ๋ณตํ•ฉ ์ฐฝ ๊ด€๋ฆฌ์ž๊ฐ€ ์žฅ์ฐฉ๋˜์–ด ์žˆ์œผ๋ฉฐ ELF ํ˜•์‹, ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น, ๊ทธ๋ž˜ํ”ฝ ๋ฐ ๋„คํŠธ์›Œํฌ ์Šคํƒ์—์„œ ๋™์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์‹คํ–‰ ํŒŒ์ผ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€์—๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž, ๊ทธ๋ž˜ํ”ฝ ํŽธ์ง‘๊ธฐ, PDF ๋ทฐ์–ด, ๊ณ„์‚ฐ๊ธฐ ๋ฐ ๊ฐ„๋‹จํ•œ ๊ฒŒ์ž„๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ToaruOS ๊ด€๋ จ ๊ทธ๋ž˜ํ”ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š” Python 3.6 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ํฌํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ToaruOS๋กœ ํฌํŒ…๋œ ํƒ€์‚ฌ ํ”„๋กœ๊ทธ๋žจ์—๋Š” Vim, GCC, Binutils, FreeType, MuPDF, SDL, Cairo, Doom, Quake, Super Nintendo ์—๋ฎฌ๋ ˆ์ดํ„ฐ, Bochs ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ToaruOS๋Š” ๋””์Šคํฌ ๋“œ๋ผ์ด๋ฒ„(PATA ๋ฐ ATAPI), EXT2 ๋ฐ ISO9660 ํŒŒ์ผ ์‹œ์Šคํ…œ, ํ”„๋ ˆ์ž„ ๋ฒ„ํผ์™€ ๊ฐ™์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„์˜ ๋Œ€๋ถ€๋ถ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์™€ ๋ชจ๋†€๋ฆฌ์‹ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ชจ๋“ˆ์‹ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. , ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค, ๋„คํŠธ์›Œํฌ ์นด๋“œ(AMD PCnet FAST, Realtek RTL8139 ๋ฐ Intel PRO/1000), ์‚ฌ์šด๋“œ ์นฉ(Intel AC'97) ๋ฐ ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์šฉ VirtualBox ์ถ”๊ฐ€ ๊ธฐ๋Šฅ.

์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ์—๋Š” Unix ์Šค๋ ˆ๋“œ, TTY, ๊ฐ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ, IPC, ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ, ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น ๋ฐ ๊ธฐํƒ€ ํ‘œ์ค€ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ext2๊ฐ€ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ปค๋„๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด Linux์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ƒ์„ฑ๋œ ์˜์‚ฌ FS /proc ๊ตฌํ˜„์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

2021๋…„ ๊ณ„ํš์—๋Š” 64๋น„ํŠธ x86-64 ์•„ํ‚คํ…์ฒ˜(ํ˜„์žฌ ์–ด์…ˆ๋ธ”๋ฆฌ๋Š” 32๋น„ํŠธ x86 ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด์„œ๋งŒ ์ƒ์„ฑ๋จ)์— ๋Œ€ํ•œ ์ž‘์—…๊ณผ ๋‹ค์ค‘ ํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ(SMP)์— ๋Œ€ํ•œ ์ง€์›์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชฉํ‘œ์—๋Š” ์‹ ํ˜ธ ์ฒ˜๋ฆฌ ๋ฐ ๋™๊ธฐํ™” ๋ฐฉ๋ฒ• ๋ถ„์•ผ์—์„œ POSIX ์‚ฌ์–‘๊ณผ์˜ ํ˜ธํ™˜์„ฑ ํ–ฅ์ƒ, ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ Newlib ์ˆ˜์ค€์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ์ž์ฒด C ์–ธ์–ด ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ๊ฐœ๋ฐœ ๋„๊ตฌ ๊ตฌํ˜„์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋˜ํ•œ ์‹œ์Šคํ…œ์šฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ ์‚ฌ์šฉ์ž ์ •์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ Python์„ ๋Œ€์ฒดํ•˜๋„๋ก ์„ค๊ณ„๋œ ์ž์ฒด ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ Kuroko๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ปดํŒŒ์ผ ๋ฐ ํ•ด์„์„ ์ง€์›ํ•˜๋ฉฐ ๊ตฌ๋ฌธ์€ Python๊ณผ ์œ ์‚ฌํ•˜๋ฉฐ(๋ช…์‹œ์ ์ธ ๋ณ€์ˆ˜ ์ •์˜๊ฐ€ ํฌํ•จ๋œ Python์˜ ๋‹จ์ถ• ๋ฐฉ์–ธ์œผ๋กœ ์œ„์น˜ ์ง€์ •๋จ) ๊ตฌํ˜„์ด ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ „์—ญ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์ž‘์€ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(~500KB) ํ˜•ํƒœ๋กœ ์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ†ตํ•ฉ๋˜๊ณ  C API๋ฅผ ํ†ตํ•ด ํ™•์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ToaruOS ์™ธ์—๋„ Linux, macOS, Windows์—์„œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ WebAssembly๋ฅผ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ToaruOS์˜ ์ƒˆ ๋ฆด๋ฆฌ์Šค๋Š” ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ Kuroko ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐœ๋ฐœ์— ์ค‘์ ์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Quake ๊ฒŒ์ž„์—์„œ ์กฐ๋ช… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ˆ˜ํ•™ ํ•จ์ˆ˜๊ฐ€ libc์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. EFI ๋ชจ๋“œ์—์„œ VirtualBox๋กœ ๋ถ€ํŒ…ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋žจ ๋””์Šคํฌ ์ด๋ฏธ์ง€ ์••์ถ•์„ ์‚ฌ์šฉํ•˜์—ฌ iso ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ค„์˜€์Šต๋‹ˆ๋‹ค.

Kuroko 1.1 ์–ธ์–ด์˜ ์ƒˆ ๋ฆด๋ฆฌ์Šค์—๋Š” ๋น„๋™๊ธฐ ๋ฐ ๋Œ€๊ธฐ์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„, Python 3๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๊ฐœ์„ , ๋‹ค์ค‘ ๊ฐ’ ํ• ๋‹น ์ง€์›, C ์–ธ์–ด๋กœ ํ•ธ๋“ค๋Ÿฌ ์ž‘์„ฑ ๋„๊ตฌ ํ™•์žฅ, ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์œ ํ˜• ์ฃผ์„ ์ง€์› ์ถ”๊ฐ€, ํ‚ค์›Œ๋“œ "yield" ๋ฐ "yield from", os, dis, fileio ๋ฐ time ๋ชจ๋“ˆ์ด ํ†ตํ•ฉ๋˜์—ˆ์œผ๋ฉฐ, str, list, dict ๋ฐ bytes์— ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์‚ฌ์ „ ์ปดํŒŒ์ผ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ๋ผ์ด์„ ์Šค๊ฐ€ MIT๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด์ „์—๋Š” MIT์™€ ISC๊ฐ€ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค).

์ถœ์ฒ˜ : opennet.ru

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