์๋ฎฌ๋ ์ด์ ํ๋ก์ธ์๊ฐ ์๋ ๊ฐ์ ๋จธ์ ์์ ์ ์ ๋ฐ ๋์ ์ผ๋ก ๋น๋๋ Linux ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์๋ x86-64 ํ๋ก์ธ์ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ๊ฐ๋ฐํ๋ Blink ํ๋ก์ ํธ์ ์ฒซ ๋ฒ์งธ ์ค์ํ ๋ฆด๋ฆฌ์ค๊ฐ ๊ฒ์๋์์ต๋๋ค. Blink๋ฅผ ์ฌ์ฉํ๋ฉด x86-64 ์ํคํ ์ฒ์ฉ์ผ๋ก ์ปดํ์ผ๋ Linux ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ POSIX ํธํ ์ด์ ์ฒด์ (macOS, FreeBSD, NetBSD, OpenBSD, Cygwin) ๋ฐ ๋ค๋ฅธ ํ๋์จ์ด ์ํคํ ์ฒ(x86, ARM, RISC-V, MIPS)๊ฐ ์๋ ํ๋์จ์ด์์ ์คํํ ์ ์์ต๋๋ค. , PowerPC, s390x). ํ๋ก์ ํธ ์ฝ๋๋ C(ANSI C11)๋ก ์์ฑ๋์์ผ๋ฉฐ ISC ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ์ข ์์ฑ ์ค libc(POSIX.1-2017)๋ง ํ์ํฉ๋๋ค.
๊ธฐ๋ฅ๋ฉด์์ Blink๋ qemu-x86_64 ๋ช ๋ น๊ณผ ์ ์ฌํ์ง๋ง ๋ ์์ ๋์์ธ๊ณผ ์๋นํ ์ฑ๋ฅ ํฅ์์ด๋ผ๋ ์ ์์ QEMU์ ๋ค๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด Blink ์คํ ํ์ผ์ qemu-x221_115์ ๊ฒฝ์ฐ 4MB ๋์ 86KB(์๋ฆฐ ๋น๋ ํฌํจ - 64KB)๋ง ์ฌ์ฉํ๋ฉฐ GCC ์๋ฎฌ๋ ์ดํฐ์์ ์คํํ๊ณ ์ํ ์ฐ์ฐ์ ์ํํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ผ๋ถ ํ ์คํธ์ ์ฑ๋ฅ ์ธก๋ฉด์์ ๋ณผ ๋, QEMU๋ฅผ ์ฝ XNUMX๋ฐฐ ์ถ์ํฉ๋๋ค.
๊ณ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด JIT ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉ๋์ด ์์ค ๋ช ๋ น์ ๋์ ํ๋ซํผ์ ๋ํ ๊ธฐ๊ณ ์ฝ๋๋ก ์ฆ์์์ ๋ณํํฉ๋๋ค. ํ์ค C ๋ผ์ด๋ธ๋ฌ๋ฆฌ Cosmopolitan, Glibc ๋ฐ Musl๋ก ์ปดํ์ผ๋ ELF, PE(Portable Executables) ๋ฐ bin(Flat ์คํ ํ์ผ) ํ์์ ์คํ ํ์ผ ์๋ฎฌ๋ ์ดํฐ์์ ์ง์ ์คํ์ด ์ง์๋ฉ๋๋ค. i180, i600, SSE86, x8086_386, SSE2, SSSE86, CLMUL, POPCNT, ADX, BMI64(MULX, PDEP, PEXT), X3, RDRND, RDSEED๋ฅผ ํฌ๊ดํ๋ ์ฝ 3๊ฐ์ x2 ํ๋ก์ธ์ ๋ช ๋ น์ ์๋ฎฌ๋ ์ด์ ๋ฐ 87๊ฐ์ Linux ์์คํ ํธ์ถ์ ๋ํ ๊ธฐ๋ณธ ์ง์์ ๊ตฌํํ์ต๋๋ค. ๋ช ๋ น์ด ์ธํธ ๋ฐ RDTSCP.
๋ํ ํ๋ก๊ทธ๋จ ์คํ์ ์๊ฐํํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ด์ฉ์ ๋ถ์ํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ Blink๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Blinkenlights ์ ํธ๋ฆฌํฐ๊ฐ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. ์ด ์ ํธ๋ฆฌํฐ๋ ์ญ ๋๋ฒ๊น ๋ชจ๋(Reverse-Debugging)๋ฅผ ์ง์ํ๋ ๋๋ฒ๊ฑฐ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์คํ ๊ธฐ๋ก์์ ๋ค๋ก ์ด๋ํ๊ณ ์ด์ ์ ์คํ๋ ์ง์ ์ผ๋ก ๋์๊ฐ ์ ์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ C-library Cosmopolitan, Linux์ฉ ์์ฝ ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ํฌํธ ๋ฐ Redbean ๋ฒ์ฉ ์คํ ํ์ผ ์์คํ ๊ณผ ๊ฐ์ ๊ฐ๋ฐ์ ์์ฑ์๊ฐ ๊ฐ๋ฐํ์ต๋๋ค.
์ถ์ฒ : opennet.ru