by 피터 프래터듀스(Peter Fraterdeus), 역 한빛 리포터 1기 서성용
Mac OS X이 BSD를 기반으로 작성되었다는 사실은 알고 있으리라 생각한다. 그러나 BSD가 실제로는 경쟁 상대인 리눅스보다 훨씬 오래되었고, 개인용 컴퓨터 이전 시기로 거슬러 올라간다는 사실은 알고 있는가?
다음 10년을 위한 애플社의 코드 기반으로 스티브 잡스가 자금을 지원하는 이 OS가 어떻게 그처럼 오래된 코어 위에 세워질 수 있을까? 그렇게 중요한 전략적 빌딩 블록이 겉보기에는 오래된 기술에 의존한다는 것이 이상해 보일 수도 있다.
유닉스 기반은 지난 수십 년간 성장하고 적응되면서 Sun의 Solaris, IBM의 AIX, 그리고 리눅스 등 다른 변종(variations)을 낳았다. 게다가 CEO 스티브 잡스는 NeXT 소프트웨어에 유닉스의 변종을 사용했는데, 과거엔 윤기 나고 검은 마그네슘 상자가 제네바의 팀 버너스 리(Tim Berners-Lee)의 책상 위에 있었다. 팀 버너스 리의 NeXT 컴퓨터에서 월드 와이드 웹이 생겨 났고, 차세대 맥킨토시 사용자도 같은 플랫폼을 사용할 것이다.
BSD(Berkeley Standard Distribution)는 유닉스와 같은 OS로, 캘리포니아의 버클리대학에서 만들었고, 최초의 "오픈 소스" POSIX와 호환되는 체제 중의 하나였다(오픈 소스 운동이라는 이름을 갖기 이전). 버클리의 컴퓨터과학과는 다른 POSIX 호환 OS와 마찬가지로, 같은 입력을 주었을 때 같은 출력을 생성하도록 BSD를 설계했다.
그 당시 유닉스는 특정 하드웨어 벤더에 속한 많은 변종으로 쪼개지고 있었다. POSIX는 연방 정부가 벤더의 하드웨어 플랫폼에 상관없이, 공통된 특성과 명령을 만들려고 하면서 탄생했다. 즉, 하나의 하드웨어 플랫폼을 위한 프로그램이 다른 하드웨어에도 어느 정도 이식될 수 있다는 것이었다. BSD의 역사에 관해 더 알고 싶으면
여기를 클릭하자.
필자는 좀더 눈에 보이는 실제적인 것에 관심이 많다. 필자의 Titanium G4 PowerBook은 이 특별한 POSIX 호환 OS를 구동하도록 설계되었다. 슈퍼컴퓨터를 5년 전의 모습으로 돌려 놓은 21세기의 아쿠아 인터페이스를 디스플레이하는 것도 좋지만, 이론상으로는 20년 전 VAX용으로 쓴 명령 스크립트를 구동하는 것도 좋다.
애플 Mach/BSD/Darwin 전략의 숨겨진 기본적인 동기는 유닉스 커널 구조를 수십 년간 개발해 온 힘을 이용하자는 것이다. 유닉스의 안정성과 핵심 BSD 서비스의 고유(native) 네트워크 지원, 그리고 이 OS를 개발하고 디버그하는 데 도움을 준 POSIX 소프트웨어의 수많은 사용자/개발자가 애플에 성숙한 OS를 다듬는 데 몇 년을 보낼 필요 없이 발표하게 하는 것이다.
마이크로소프트의 윈도우 운영체제가 싸고 수많은 PC 및 클론에 기반을 두어서 친숙한 반면에, 유닉스는 학술적이고 과학적인 작업을 주로 한다. 그리고 유닉스의 확장성으로 건축, 비디오, 영화, 애니메이션 등의 분야에서 널리 사용되고 있는데, 이런 분야에서는 사용자 인터페이스보다는 처리 능력이 더 중요하다.
자바 개발자들은 Mac OS X에 관심을 가지고 있다. 오픈 소스 커뮤니티 역시 관심을 가질 것인가?
이미지, 데이터 마이닝, 웹 상거래 등에 높은 병렬 처리를 제공하는 서버는 유닉스를 통해 훨씬 쉽게 구현되고 확장될 수 있다. 하드웨어를 더 구입하고, 하드 드라이브를 복제해서, 네트워크에 연결하기만 하면 된다. 물론, 오픈 소스 운동은 이것 때문에 엄청나게 성장해왔다. 하드웨어만 구입하면 되고, 라이선스 비용은 없다!
리눅스는 현재 가장 잘 알려진 오픈 소스 OS이지만, BSD(FreeBSD, OpenBSD, 애플의 다윈이든 간에) 역시 인지도를 높여 가고 있다. 사실 리누스 토발즈가 최근에 OS X의 Mach 커널에 대해 혹평한 적이 있어서(그는 부인하지만), 다윈의 인지도가 더욱 커졌다(혹평하는 것만큼 치명적인 것도 없다고들 하지 않는가?). 다윈은 애플의 BSD OS 계층에 대한 이름이다. 다윈은 그 자체로도 완벽히 쓸만한 OS이지만, 우리는 대부분 아쿠아 인터페이스가 돌아가는 기반으로 알고 있다.
충성스러운 애플 지원자들은 18살이 7살과 다른 것만큼 실제로 원래의 Mac OS와 다른 OS를 사랑하고 이해하는 것을 배워야 한다. 같은 것은 이름뿐일 수도 있다. 확실히 터미널 응용프로그램에서 명령행으로부터 깜빡이는 커서는 예전의 Mac OS 환경에서와 전혀 유사한 점이 없다. 그들이 말하는 대로라면, 커서와 다양한 데몬은 훌륭한 하인이긴 하지만 주인이 되기에는 너무 형편없다. 다음 기사에서는 이러한 하인들을 지시하는 감각과, 그들이 제공하는 서비스를 탐색하는 방법을 설명할 것이다.
기초 중의 기초
BSD 계층 (그리고 깜빡이는 터미널 커서) 아래에는 Mach 커널이 있다. 컴퓨터에서 일어나는 모든 일이 커널과 관련이 있지만, 커널에 대해서는 깊이 설명하지 않을 것이다. 커널은 교통 경찰에 비유할 수 있다. 모든 프로세스가 잘 돌아가도록 지킨다. 커널 작업은 스타트업시에 처음으로 시작되는 작업이고, 셧다운시에는 마지막으로 종료된다.
[localhost:~] peterf% sudo kmodstat
Password:
Id Refs Address Size Wired Name (Version) <Linked Against>
1 1 0x0 0x0 0x0 com.apple.kernel (1.3.3)
2 1 0x0 0x0 0x0 com.apple.kernel.bsd (1.0.3)
3 9 0x0 0x0 0x0 com.apple.kernel.iokit (1.0.3)
4 9 0x0 0x0 0x0 com.apple.kernel.libkern (1.0.3)
5 3 0x0 0x0 0x0 com.apple.kernel.mach (1.0.3)
|
앞의 다섯 개 모듈은 커널에 동적으로 링크되어 있다. 다른 모듈 중의 일부는
여기에 나타난 것을 포함한다.
이러한 커널 모듈은 CD/DVD, AirPort, FireWire 드라이브나 USB에 접근할 필요 없이, 매우 기본적인 서비스를 제공한다는 것을 알 수 있다(필자는 Wacom tablet을 위한 모듈을 몹시 기다리고 있다).
필자는 Mac OS에서 BSD 계층이 어떻게 동작하는지에 대해 앞으로의 기사에서 보다 많은 정보를 제공할 것이다. 유닉스나 OpenStep에 배경지식이 있는 사람들에게는 익숙한 영역일 것이다. 사실 여러분 중에는 필자보다 BSD에 대해 더 깊은 지식을 가진 사람이 많으리라 생각한다. 필자가 모든 수준의 맥 사용자들에게 이 훌륭한 (새로운) 세계의 진가를 전해주는 동안, 여러분은 필자의 틀린 점을 수정해 주어 필자의 지식을 향상시킬 수 있기를 바란다.
Location, location, location
우리의 첫 번째 방법은 간단하지만 매우 유용하다.
터미널 응용프로그램(
/Applicatoins/Utilities/에 있음)을 열고 다음을 입력한다.
locate가 아무 것도 반환하지 않으면, "locate DB" 스크립트가 아직 초기화되지 않았기 때문이다. 이러한 경우(최근에 OS X를 설치했고, 정규
cron 스크립트가 아직 실행되지 않은 경우)엔 다음을 입력하고 몇분 동안 기계가 작업을 하도록 한다. 행의 마지막에 있는 &는 프로세스를 백그라운드에 넣는다.
sudo /usr/libexec/locate.updatedb &
|
그 동안
locate 명령에 대한 맨 페이지를 읽을 수 있는데, 명령은 다음과 같다.
updatedb 스크립트가 실행을 마치면, 다시 한번 시도한다.
긴 파일 목록이 깜빡이면서 지나치는 것을 볼 수 있을 것이다. 터미널은 몇 줄을 기억하므로, 뒤로 되돌아가서 요청에 맞는 뭔가를 찾았는지 볼 수 있을 것이다. 한번에 한 화면씩 보고 싶으면 다음과 같이 입력한다.
이것은
locate의 출력을
less라는 "text pager"로 "pipe"해준다(이전에 less는 "hit space for more"라는 메시지 때문에
more라 불리던 프로그램이었다).
목록의 첫 페이지가 스크린에 나타날 것이다. 계속 보고 싶으면 스페이스바를 누른다. 다음 페이지를 보려면(Forward) Command-F를 눌러도 되고, 다음 줄을 보려면 아래 화살표를 누르고, 이전 페이지를 보려면(Back) Command-B를 누르면 되고, 기타 몇 가지가 더 있다.
less 명령은 시스템에 있는 어떤 텍스트 파일이든지 신속하게 읽기만 할 때 좋다. 물론
less 명령에는 이보다 많은 것이 있지만, 다음에 다루기로 하자.
이제
locate 명령에 대해 여러분에게 몇 가지를 남겨둬야겠다. 다음을 시도해 보자.
그리고 이번엔
그리고 이번엔
locate "/Sys*Fonts*" | less
|
또는 다음처럼
locate "/Lib*Fonts*" | less
|
locate에 대한 맨 페이지는 다음과 같다.
패턴은 임의의 문자열인데, "globbing" 문자에 따라 특정 행동을 가지고 있다. 맨 페이지에는
"셸 globbing 그리고 인용 문자들("*", "?", "", "[" and "]")은 패턴에서 사용되는데, 셸에서 해석방지(escaped) 되어야 한다. 백슬래시("")로 시작하는 문자는 원래 가진 특별한 의미를 잃게 된다. 매칭은 슬래시를 포함한 어떤 문자도 명백하게 매치되지 않는다는 점에서 다르다."
특별한 경우로, globbing 문자가 없는 패턴의 경우엔("foo" 같은) "*foo*"인 것처럼 만족된다.
간단히 말해서, 이는 정규식에서 "regex"를 만들 때 사용하는 패턴인데, "regex"는 다양한 문자열의 집합을 만족한다. 예를 들면, 위의 예제에서
/Sys*Fonts* 는 "/Sys"로 시작하고, 중간에 임의 숫자의 문자가 있고, 그 다음엔
Fonts가 나오며, 그 뒤에는 행의 끝까지 임의숫자의 문자가 있는 파일 경로 이름을 만족시키는 것을 의미한다. 정규 표현식에 대해서는
Mastering Regular Expressions(O"Reilly)을 참조하자. 매우 정규적인 표현을 위해선
man re_format과
man grep을 이용하자.
피터 프래터듀스(Peter Fraterdeus)는 1993년부터 리눅스로 웹 마스터 업무를 하고 있으며, 1984년 10월에 128k 모델을 구입하고 Mac에 중독되었다.
서성용님은 한빛 리포터 1기로 활동 중이며, 서울대학교 컴퓨터공학부 3학년에 재학중입니다. 현재 학부 체계 관리자 그룹 ACCESS의 UNIX Team Chief이며, Linux, kernel, network, computer architecture에 관심이 많다고 합니다.