์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜ : http://systemscoaching.kr/62


๊ธฐ์–ต๋ ฅ์ด ์ ์  ๋‚˜๋น ์ง„๋‹ค. ์ดํ•ดํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๋‚˜์ค‘์— ํ•„์š”ํ•˜๋ฉด ๋‹ค์‹œ ๊บผ๋‚ด์„œ ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด Open Source Software์˜ ๊ฐœ๋…์ด๋‹ค. ์ด ํฌ์ŠคํŠธ๋Š” ํ•„์ž์˜ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ์œผ๋กœ, ์–ด๋–ค ๋ฒ•์ ์ธ ์กฐ์–ธ๋„ ๋‹ด๊ณ  ์žˆ์ง€ ์•Š๊ณ , ์ด ํฌ์ŠคํŠธ์˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜๋Š” ๊ฒƒ์€ ๋…์ž์˜ ์„ ํƒ์ด๋ฉฐ, ํ•„์ž๋Š” ์–ด๋–ค ๋ฒ•์ ์ธ ์ฑ…์ž„๋„ ์ง€์ง€ ์•Š๋Š”๋‹ค.

 

์†Œํ”„ํŠธ์›จ์–ด ๋ผ์ด์„ผ์Šค ์ •์ฑ…

Open Source

ํ†ต๋…์ ์œผ๋กœ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ๋ˆ„๊ตฌ๋‚˜ ์ˆ˜์ •ํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งํ•œ๋‹ค. ์›์ž‘์ž๊ฐ€ ์ง€์ •ํ•œ ๋ผ์ด์„ผ์Šค ์กฐ๊ฑด๋งŒ์„ ์ง€ํ‚ค๋ฉด, ๊ธฐ์—…์—์„œ๋„ ์ƒ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. GPL, LGPL, BSD, MPL, Apache ๋“ฑ์ด ์œ ๋ช…ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ผ์Šค ์ •์ฑ…์ด๋‹ค.

 

Closed Source (Proprietary Source)

์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ์ง€ ์•Š๊ณ , ์ €์ž‘๊ถŒ์ž๊ฐ€ ํ†ต์ œ๊ถŒ์„ ํ–‰์‚ฌํ•  ์ˆ˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งํ•œ๋‹ค. ์ €์ž‘๊ถŒ์ž์™€์˜ ํ˜‘์˜(๊ณ„์•ฝ)์—†์ด ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์žฌ ๋ฐฐํฌํ•  ์ˆ˜ ์—†๋‹ค. ์ฃผ๋กœ ๊ธฐ์—…์ด๋‚˜ ๊ธฐ์—…์ง‘๋‹จ์— ์˜ํ•ด ๋…๋ฆฝ์ ์œผ๋กœ ์†Œ์œ ๋˜๋ฉฐ, ๋ผ์ด์„ผ์‹ฑ์„ ํ†ตํ•ด ๋ˆ์„ ๋ฒŒ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

 

Free Software

โ€œFree lunchโ€, โ€œFreedomโ€ ์—์„œ ์‚ฌ์šฉ๋œ โ€œFreeโ€์˜ ์˜๋ฏธ๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋‹ค. ์˜คํ”ˆ์†Œ์Šค๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ณต๊ฐœํ•œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๊ฐ•ํ•˜๊ณ , ํ”„๋ฆฌ์†Œํ”„ํŠธ์›จ์–ด๋Š” โ€œ์‚ฌ์šฉ์˜ ์ž์œ โ€์˜ ์˜๋ฏธ๊ฐ€ ๊ฐ•ํ•˜๋‹ค. ํ˜น์ž๋Š” โ€œOpen source is a development methodology; free software is a social movement.โ€ ๋ผ๊ณ  ๋งํ•œ๋‹ค.

 

Shared Source

3rd Party๋“ค๊ณผ ๊ณ„์•ฝ์„ ํ†ตํ•ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ณต๊ฐœํ•˜๋Š” ์ˆ˜์ค€์„ ์ •์˜ํ•œ Microsoft์˜ ๋ผ์ด์„ผ์Šค ์ •์ฑ…์ด๋‹ค. ๊ณ„์•ฝ์˜ ํ˜•ํƒœ์— ๋”ฐ๋ผ, ์™„์ „ Closed Source ๊ณ„์•ฝ, Source Code ์ฐธ์กฐ ๊ฐ€๋Šฅ ๊ณ„์•ฝ, ์ˆ˜์ • ๋ฐ ์žฌ๋ฐฐํฌ ๊ฐ€๋Šฅ ๊ณ„์•ฝ์œผ๋กœ ๋‚˜๋ˆ„์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์˜ ์žฅ์ 

a. ๋ฐฉ๋Œ€ํ•œ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ? ์ „์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž๋“ค์ด ์˜คํ”ˆ๋œ ํ† ๋ก ์„ ํ†ตํ•˜์—ฌ ํ•ด๋‹น ์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตฌ์กฐ, ๋ฒ„๊ทธ ํŒจ์น˜, ๊ธฐ๋Šฅ์„ ๊ณ„์† ๋ฐœ์ „์‹œํ‚จ๋‹ค. ์ „์„ธ๊ณ„์˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ๊ฐœ ๋˜๋Š” ๋ช‡๊ฐœ์˜ ๊ธฐ์—…์ด ์ฐธ์—ฌํ•œ ํด๋กœ์ฆˆ๋“œ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๋น„ํ•ด ํ›จ์”ฌ ๋งŽ์€ ๊ฐœ๋ฐœ์ž ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

b. ๋น ๋ฅธ ๊ฐœ๋ฐœ ๋ฐ ํ’ˆ์งˆ ๊ฒ€์ฆ ? ์ „์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฐธ์—ฌํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์˜ ์†๋„๋‚˜ ๋ฒ„๊ทธ ํŒจ์น˜์˜ ์†๋„๋ฉด์—์„œ ํด๋กœ์ฆˆ๋“œ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๋น„ํ•ด ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.

c. ๋” ํฐ ์—์ฝ”์‹œ์Šคํ…œ ? ํด๋กœ์ฆˆ๋“œ์†Œ์Šค ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ฐ–๋Š” ํ์‡„ํ˜• ๊ฐœ๋ฐœ ์ƒํƒœ๊ณ„์— ๋น„ํ•ด์„œ?์ „ํ†ต์ ์ธ  ๊ฐ‘์„๊ด€๊ณ„์—์„œ ์†”๋ฃจ์…˜/์šฉ์—ญ ์—…์ฒด๋“ค์„ ์ค„์„ธ์›Œ ๋ด์•ผ ์†์œผ๋กœ ๊ผฝ์„ ์ˆ˜ ์žˆ์„ ์ •๋„์ด๋‹ค?, ์˜คํ”ˆ๋œ ์†Œ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์šฉํ™” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋งŽ์€ ๊ธฐ์—…๋“ค์ด ์กด์žฌํ•œ๋‹ค.

d. ํ‘œ์ค€ ๊ธฐ๋ฐ˜ ์†Œํ”„ํŠธ์›จ์–ด ? POSIX, SVR4, BSD Socket๊ณผ ๊ฐ™์€ ์‚ฐ์—… ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์‚ฐ์—…/์‹œ์žฅ๊ฐ„์˜ ๊ฒฝ๊ณ„๋ฅผ ํ—ˆ๋ฌผ์–ด ๋œจ๋ฆฌ๊ณ , ๊ธฐ์กด ๊ฐœ๋ฐœ ๊ฒฐ๊ณผ๋ฌผ๋“ค์˜ ์žฌํ™œ์šฉ์„ฑ์„ ๋†’์—ฌ ์ค€๋‹ค.

e. ์†Œ์Šค์ฝ”๋“œ ์ œ๊ณต

f. ๋น„์šฉ ์ ˆ๊ฐ

 

GPL(General Public License)

 

 

 

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ GPL ๋ผ์ด์„ผ์Šค ์ •์ฑ…์„ ์„ ํƒํ•œ๋‹ค๋ฉด, โ“ ์ €์ž‘๊ถŒ์„ ํ‘œ์‹œํ•˜๊ณ  โ“‘ ๋ฌด๋ณด์ฆ (No warranty) ์กฐํ•ญ์„ ํ‘œ์‹œํ•˜๊ณ  โ“’ GPL๋กœ ๋ฐฐํฌ๋จ์„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. ์ž์‹ ์ด๋‚˜ ์ œ 3์ž์˜ ํŠนํ—ˆ๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ฐœ๋ฐœํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ GPL๋กœ ๋ฐฐํฌํ•œ๋‹ค๋ฉด, ์ž์‹ ์˜ ํŠนํ—ˆ์— ๋Œ€ํ•œ Royalty๋ฅผ ์ฒญ๊ตฌํ•  ์ˆ˜ ์—†๊ณ , ์ œ 3์ž๋„ ํŠนํ—ˆ์— ๋Œ€ํ•œ Royalty๋ฅผ ์ฒญ๊ตฌํ•  ์ˆ˜ ์—†๋‹ค?์ œ 3์ž์˜ ํŠนํ—ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค๊ณ  GPL๋กœ ๋ฐฐํฌํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, ํŠนํ—ˆ๋ฅผ ๊ฐ€์ง„ ์ œ 3์ž์—๊ฒŒ ์‚ฌ์ „ ๋™์˜๋ฅผ ์–ป์–ด์•ผ ํ•œ๋‹ค*. GPL๋กœ ์„ ์–ธ๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ (Derived Work)๋Š” GPL ์กฐ๊ฑด์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค. GPL๋กœ ์„ ์–ธ๋œ ์ฝคํฌ๋„ŒํŠธ๋ฅผ ๋งํฌํ•œ (Static, Dynamic Link ๋ชจ๋‘์— ํ•ด๋‹น) ์ƒ์œ„ Application์€ GPL ์กฐ๊ฑด์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.


* GPLed ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋Š” ์ž์‹ ์ด ์ฑ„์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์— ๋Œ€ํ•œ ํŠนํ—ˆ๊ถŒ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์ž˜ ๋ชจ๋ฅธ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ํŠนํ—ˆ๊ถŒ์ž๋Š” GPL ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž ๋ณด๋‹ค๋Š”, GPL ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์—…์— ํŠนํ—ˆ ์†Œ์†ก์„ ํ•œ๋‹ค. ์ด๋Š” ๊ฒฝ์ œ๋…ผ๋ฆฌ๋กœ์„œ, ๊ฐœ์ธ๋ณด๋‹ค ๊ธฐ์—…์— ์ฒญ๊ตฌํ•ด์•ผ ๋ˆ์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Ÿฐ ์ˆจ์–ด ์žˆ๋Š” ํŠนํ—ˆ๊ถŒ์˜ ์œ„ํ—˜์„ฑ์„ ์‚ฌ์ „์— ์ฐพ์•„ ์ฃผ๋Š” ํˆด์ด BlackDuck็คพ์˜ ProtexIP์ด๋‹ค.

 

LGPL (Lesser GPL)

 

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ LGPL ๋ผ์ด์„ผ์Šค ์ •์ฑ…์„ ์„ ํƒํ•œ๋‹ค๋ฉด, โ“ ์ €์ž‘๊ถŒ์„ ํ‘œ์‹œํ•˜๊ณ  โ“‘ ๋ฌด๋ณด์ฆ (No warranty) ์กฐํ•ญ์„ ํ‘œ์‹œํ•˜๊ณ  โ“’ LGPL๋กœ ๋ฐฐํฌ๋จ์„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. LGPL ์„ ์–ธ๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์‹œ LGPL๋กœ ๋ฐฐํฌ๋˜์–ด์•ผ ํ•œ๋‹ค. LGPL ์„ ์–ธ๋œ ์ฝคํฌ๋„ŒํŠธ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ Static Link/Dynamic Linkํ•˜๋Š” Application์€ ๋‹ค์‹œ LGPL๋กœ ๋ฐฐํฌ๋  ํ•„์š”๋Š” ์—†๋‹ค. ๋‹ค๋งŒ, ์ฝคํฌ๋„ŒํŠธ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์ƒ์œ„ Application์— Static Link๋ฅผ ํ–ˆ์„ ๊ฒฝ์šฐ, ์ˆ˜์ •๋œ LGPLed ์›๋ณธ(Static Link๋œ Component)์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋Š” ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค (Section 6).

 

Linux System Architecture

 

์ผ๋ฐ˜์ ์œผ๋กœ Linux System์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Kernel Space์™€ User Space๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. Kernel ์ž์ฒด๋Š” GPL์ด๋ฉฐ, Kernel๊ณผ Static์œผ๋กœ ์—ฎ์ด๋Š” Device Driver๋„ ๋‹น์—ฐํžˆ GPL์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋ฐ˜๋ฉด, Kernel๊ณผ System Call์„ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•˜๋Š” User Space์˜ Application๋“ค์€ ๋ผ์ด์„ผ์Šค ์ •์ฑ…์„ ์ž์œ ๋กญ๊ฒŒ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๋‹คํ–‰ํžˆ๋„ User Space์—์„œ ๊ตฌ๋™ํ•˜๋Š” ์ฃผ์š” Open Source Library๋“ค์€ 99%๊ฐ€ non-GPL๋กœ ์„ ์–ธ ๋˜์–ด ์žˆ์–ด์„œ, ์ด๋“ค์„ Linkํ•ด์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์†Œ์Šค ๊ณต๊ฐœ์— ์˜๋ฌด๋Š” ์—†์–ด์ง„๋‹ค.

 

๋Œ€ํ‘œ์ ์ธ Linux Middlewares

 Middleware or Library

Function

Licenses

glibc

Standard C library

LGPL

libg++

Standard C++ library

LGPL

Qt

Graphics framework

LGPL/Proprietary

libjpeg

Jpeg library

IJG's free license

ffmpeg

Multimedia Framework (Codecs)

LGPL

Gstreamer

Multimedia Framework

LGPL

 

libc

Android์—์„œ๋Š” Linux์—์„œ ๋Œ€ํ‘œ์ ์ธ C Runtime์ธ glibc๋‚˜ uclibc๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , bionic libc๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋“ค์€ LGPL๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์œผ๋‚˜, ์–ด๋–ค ์ด์œ ์—์„œ์ธ ์ง€ ๋ชฐ๋ผ๋„, Android์—์„œ๋Š” ๋ผ์ด์„ผ์Šค๋ฌธ์ œ๊ฐ€ ์ „ํ˜€ ์—†๋Š” bionic์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๋•Œ๋ฌธ์—, gcc๋กœ ์ปดํŒŒ์ผ๋˜๋Š” Native C์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๋ณต์žกํ•œ NDK(Native Development Kit) ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

 

Qt

QT๋Š” ํŠน์ดํ•˜๊ฒŒ Dual ๋ผ์ด์„ผ์Šค ์ •์ฑ…์„ ์ทจํ•˜๊ณ  ์žˆ๋‹ค. ๊ณผ๊ฑฐ๊นŒ์ง€๋งŒ ํ•ด๋„, OSI(Open Source Initiative)์˜ ์ธ์ •์„ ๋ฐ›์ง€ ๋ชปํ–ˆ๋˜ QPL์ด๋ผ๋Š” ์˜คํ”ˆ์†Œ์Šค ์ •์ฑ…๊ณผ ํด๋กœ์ฆˆ๋“œ์†Œ์Šค ์ •์ฑ…์˜ ๋‘๊ฐ€์ง€ ์ •์ฑ…์„ ์ทจํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. QT์˜ ์ €์ž‘๊ถŒ์ž์ธ Trolltech์ด 2008๋…„ Nokia์— ์ธ์ˆ˜๋˜๊ณ , 2009๋…„์—์„œ์•ผ QT๋ฅผ LGPL QT์™€ Proprietary QT๋กœ ๊ตฌ๋ถ„ํ•˜์˜€๋‹ค.

 

libjpeg

libjpeg์€ IJG(International JPEG Group)์˜ ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฅธ๋‹ค (์•„๋ž˜ ๊ทธ๋ฆผ). ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•  ์˜๋ฌด๋Š” ์—†๋‹ค.

 

Linux Device Drivers

Linux์—์„œ Device Driver๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค: Direct kernel driver & Binary module.  ์ „์ž๋Š” Kernel itself๋ผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, GPL๋กœ ์„ ์–ธ๋œ Linux Kernel์— ๋Œ€ํ•œ Derived works์— ๊ฐ„์ฃผ๋˜๊ณ , ๋‹น์—ฐํžˆ GPL๋กœ ๊ฐ™์ด ๋ฐฐํฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋ฐ˜๋ฉด, ํ›„์ž๋Š” ๋ถ€ํŠธ ์ดํ›„์— Device๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ๋กœ๋“œ๋˜๋Š” Module๋ฐฉ์‹์ด๋‹ค ? "Modules were originally conceived as inserted extentions to a running Linux kernel". ๋งŽ์€ ๊ธฐ์—…๋“ค์ด Module driver๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋ฐฐํฌํ•˜๊ณ  ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š์œผ๋ฉฐ, ํ˜„์žฌ๋กœ์„œ๋Š” ์œ ์ผํ•˜๊ฒŒ Driver ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ณ  ์žˆ์œผ๋‚˜, Linux community์—์„œ๋Š” ์ด ๋ฐฉ๋ฒ•์„ ๋†“๊ณ  ๊ณ„์† ๋…ผ์Ÿ ์ค‘์ด๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ ๋‚ด Ubuntu ๋„ท๋ถ์—์„œ Module๋กœ ๋กœ๋“œ๋œ Driver๋“ค์ด๋‹ค. (console# lsmod)

 

 

Dynamically loadable driver module์€ Memory allocation, bus enumeration, disable/enable interrupts & preemption, networking service, debugging ๋“ฑ์˜ Kernel Service๋ฅผ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, Kernel๊ณผ ๋ถ„๋ฆฌ๋œ Standard external kernel symbol์„ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ ๋‚ด ๋„ท๋ถ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Standard external kernel symbol ๋“ค์ด๋‹ค. (colsole# gedit /proc/kallsyms)

 

Module Driver์—์„œ๋„ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค. GPL ์„ ์–ธ๋œ Linux Driver๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ฐœ๋ฐœํ•˜๋ฉด, ์•„๋ฌด๋ฆฌ Module๋กœ ๋กœ๋“œํ•œ๋‹ค๊ณ  ํ•ด๋„, Derived works๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ, ์ด๋Š” ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Linux Driver๋ฅผ Module๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” From Scratch(๋งจ๋•…์— ํ—ค๋”ฉ)๋กœ ๊ฐœ๋ฐœํ•ด์•ผ ํ•œ๋‹ค.

 

 

๊ธฐ์—…์—์„œ GPLed, LPGLed ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ™œ์šฉ๊ณผ ํ™œ์šฉ ์‚ฌ์‹ค ๊ณต๊ฐœ

๊ธฐ์—…์—์„œ ์ƒ์šฉ์œผ๋กœ GPL, LPGL ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ƒ์šฉ ์ œํ’ˆ์˜ ํƒ‘์žฌ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ „์ˆ ํ•œ ๋ฐ”์™€ ๊ฐ™์ด, GPL, LGPL ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์Œ์„ ๊ณต๊ฐœํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ๋ง์ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง€์— ์ปค๋‹ค๋ž—๊ฒŒ ์จ ๋ถ™์ผ ํ•„์š”๋Š” ์—†์ง€๋งŒ, ์ ์–ด๋„ ์„ค๋ช…์„œ, ๋ณด์ฆ์„œ ๋˜๋Š” ๋ถ€ํŠธ ๋ฉ”์‹œ์ง€ ๋“ฑ์— ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค. ๋˜, ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•ด์•ผ ํ•  ์˜๋ฌด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜จ/์˜คํ”„๋ผ์ธ ๋ฏธ๋””์–ด๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์˜๋ฌด๋ฅผ ์ดํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” FSF(Free Software Foundation)์™€ ๊ฐ™์€ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ผ์Šค ์ •์ฑ… ๊ฐ์‹œ์ž๋“ค๋กœ ๋ถ€ํ„ฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›๊ฒŒ ๋œ๋‹ค. FSF์™€ ๊ฐ™์€ ๊ธฐ๊ด€์ด ์‹ค์ œ ๋ฒ•์ ์ธ ํ–‰๋™์„ ์ทจํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ, ์‹ค์ œ ๋ฒ•์ ์ธ ํ–‰๋™์„ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์ฒด๋Š” ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ €์ž‘๊ถŒ์ž์ด๋‹ค. ๊ธฐ์—…์ด ์˜คํ”ˆ์†Œ์Šค ํ™œ์šฉ ์‚ฌ์‹ค์„ ๊ณต๊ฐœํ•˜์ง€ ์•Š์•„์„œ ์ƒ๊ธฐ๋Š” ์œ„ํ—˜์€ ์‹ฌ๊ฐํ•œ "๋ช…์˜ˆ ์‹ค์ถ”"์ด๋‹ค.

 

์š”์ฆ˜์€ Embedded System ์—์„œ๋„ Linux๋‚˜ ์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ™œ์šฉ๋„๊ฐ€ ์ ์  ๋†’์•„ ์ง€๊ณ  ์žˆ๋‹ค. ๊ตญ๋‚ด ๋Œ€๊ธฐ์—…๋“ค์—์„œ๋Š” 3rd Party๋กœ ๋ถ€ํ„ฐ ๊ณต๊ธ‰๋˜๋Š” ์†”๋ฃจ์…˜๋“ค์— ๋Œ€ํ•œ ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ๋ชฐ๊ณ  ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์„ ์‚ฌ์ „์— ์ œ๊ฑฐํ•˜๊ณ ์ž Blackduck็คพ์˜ ProtexIP์™€ ๊ฐ™์€ ์†”๋ฃจ์…˜์„ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ด ์†”๋ฃจ์…˜์€ ๊ณ„์† ์—…๋ฐ์ดํŠธ๋˜๋Š” BlackDuck ๋ณธ์‚ฌ์˜ DB์„œ๋ฒ„์— ์ ‘๊ทผํ•˜์—ฌ, ๊ฒ€์ฆํ•˜๊ณ ์ž ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง€์˜ ์œ„ํ—˜(Violation) ์—ฌ๋ถ€๋ฅผ ๊ทธ๋ž˜ํ”ฝ์œผ๋กœ ํ‘œ์‹œํ•ด ์ฃผ๊ณ , ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€ ์ค€๋‹ค. Source ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Binary  ๋„ ์™„๋ฒฝํ•˜์ง„ ์•Š์ง€๋งŒ Violation์„ ์žก์•„ ๋‚ธ๋‹ค. ์œ ์‚ฌ ํˆด๋กœ๋Š” Palamida็คพ์˜ ์†”๋ฃจ์…˜๋„ ์žˆ๋‹ค.

 

 

RTOS์—์„œ์˜ Linux Driver ์ฐธ์กฐ ํ™œ์šฉ

GPL ์„ ์–ธ๋œ Linux Driver๋ฅผ ์ฐธ์กฐํ•˜์—ฌ RTOS Device Driver๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์€ ์ ˆ๋Œ€ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค. Linux Driver๋ฅผ ์ฐธ์กฐํ•ด์„œ RTOS Device Driver๋ฅผ ๋งŒ๋“ค๊ณ  ๋งˆ์น˜ ์ง์ ‘ ๊ฐœ๋ฐœํ•œ IP(์„ค๊ณ„์ž์‚ฐ)์ธ์–‘ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ œ๊ณตํ•ด์„œ๋„ ์ ˆ๋Œ€ ์•ˆ๋œ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ„ํ—˜์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์ฒซ์งธ๋Š” ์›์ž‘์ž์— ๋Œ€ํ•œ ์ €์ž‘๊ถŒ๋ฒ• ์œ„๋ฐ˜์ด๋ฉฐ, ๋‘˜์งธ๋Š” Proprietary RTOS ์ž์ฒด, Runtime, Proprietary Application๊นŒ์ง€๋„ ๋ชจ๋‘ GPL๋กœ ๊ฐ„์ฃผ๋˜์–ด ํšŒ์‚ฌ ๋‚ด์˜ ๋ชจ๋“  Proprietary IP์— ๋Œ€ํ•œ ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•ด์•ผ ํ•ด์•ผ ํ•˜๋Š” ์œ„ํ—˜์ด๋‹ค.

 

๊ฒฐ๋ก , ์š”์•ฝ ์ •๋ฆฌ

 ์˜คํ”ˆ์†Œ์†Œ ํ™œ์šฉ

๋ผ์ด์„ผ์Šค

์„ค๋ช…

GPL ๋ณต์‚ฌ/์ˆ˜์ •

GPL

์ˆ˜์ •๋ฌผ์˜ ์†Œ์Šค์ฝ”๋“œ ๊ณต๊ฐœ

GPL Library์— ๋งํฌ

GPL

Library์˜ ์ˆ˜์ •์ฝ”๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ด์™€ ๋งํฌ๋˜๋Š” Application์˜ ์†Œ์Šค์ฝ”๋“œ๋„ ๊ณต๊ฐœ  (๋‹คํ–‰ํžˆ๋„ 99%์˜ Linux Runtime Library๋Š” non-GPL๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์Œ)

LGPL Library์— ๋งํฌ

์„ ํƒ

์˜๋ฌด์‚ฌํ•ญ ์—†์Œ

Linux Kernel๊ณผ ์ •์ƒ์ ์ธ System Call์„ ์ด์šฉํ•˜๋Š” ์ƒ์œ„ Application

์„ ํƒ

์˜๋ฌด์‚ฌํ•ญ ์—†์Œ

Linux Kernel๊ณผ Direct Static Call์„ ์ด์šฉํ•˜๋Š” ์ƒ์œ„ Application

GPL

Static link๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Linux device driver๋Š” Kernel์˜ Derived works๋กœ ๊ฐ„์ฃผ๋จ์œผ๋กœ ์†Œ์Šค ๊ณต๊ฐœ

Dynamically loadable driver module (standard kernel symbols/interfaces ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ)

์„ ํƒ

์ด๋ฏธ GPL๋กœ ์„ ์–ธ๋œ Driver code๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ์†Œ์Šค๊ณต๊ฐœ ์˜๋ฌด ์—†์Œ

 

์ฐธ๊ณ ๋ฌธํ—Œ

a. William Weinberg and Jason Wacha, Jan. 2004, MontaVista Software, Building Embedded Applications with GPL/LGPL Software
b. Wikipedia

๋ฐ˜์‘ํ˜•

+ Recent posts