2.1. 유닉스, 리눅스, 오픈 소스/자유 소프트웨어의 역사

2.1.1. 유닉스

1969-1970년 사이에 AT&T 벨 실험실의 Kenneth Thompson, Dennis Ritchie 와 동료들은 약간 사용되고 있던 PDP-7 상에서 작은 운영 체제를 개발하기 시작했는데 이는 곧 MULTICS 라 불리는 초기의 운영체제 프로젝트를 빗대어 유닉스 (UNIX) 로 명명되었다. 1972-1973년 사이에 시스템은 실현불가능했던 드문 방법인 C 프로그래밍 언어로 재작성되었는데 이 결정때문에 유닉스는 그 원래의 하드웨어로부터 바꿀 수 있고 그 원래의 하드웨어를 극복할 수 있는 최초의 널리 사용되는 운영체제가 되었다. 다른 혁신적인 것들도 또한 유닉스에 추가되었는데 이는 특히 벨 실험실과 대학 공동체의 상호 협동에 기인했다. 1979년 유닉스 7번째 버전 V7 이 발표되었으며 이는 모든 현존하는 유닉스 시스템의 대부격이다.

이 시점 이후 유닉스의 역사는 다소 복잡하게 되었는데 Berkeley 가 주도한 대학 공동체가 Berkeley Software Fistribution (BSD) 라 불리는 변종을 개발한 반면 AT&T 는 System III 와 나중에는 System IV 라는 이름으로 계속해서 유닉스를 개발했다. 1980년대 후반에서 1990년대 초반에 이러한 두 가지 중요한 변형들간의 전쟁은 최고조에 달했지만 여러 해가 지난 후에는 각 변형이 다른 변형의 중요 특징들중 많은 부분을 채택하였다. 상업적으로 System V 는 인터페이스의 대부분이 정식 표준에 채택됨으로써 표준 전쟁에서 이겼으며 대부분의 하드웨어 벤더들은 AT&T 의 System V 로 전환하였다. 그러나 System V 도 결국 많은 BSD 혁신들을 받아들이게 되었으며 그래서 결과적으로 시스템은 두 시스템의 합병 이상이었다. BSD 시스템도 사라지지 않았으며 대신 연구, PC 하드웨어와 단일 목적 서버 (예, 많은 웹 서버들은 BSD 에서 파생된 시스템을 사용하고 있다) 용으로 널리사용되게 되었다.

결과적으로 원래 7번째 판에 기초한 많은 여러가지 유닉스 버전들이 존재하게 되었다. 유닉스의 대부분 버전들은 재산권이 있으며 각각의 하드웨어 벤더에 의해 관리되었는데 예를 들어 썬 솔라리는 System V 의 변형이다. BSD 줄기의 세가지 버전들은 결국 오프 소스가 되었으며 이들은 각각 PC 타입의 하드웨어에 손쉬운 설치에 중점을 둔 FreeBSD, 많은 여러가지 CPU 아키텍쳐에 중점을 둔 NetBSD 와 보안에 중점을 둔 OpenBSD 이다. 유닉스 역사에 대한 더욱 일반적인 정보는 http://www.datametrics.com/tech/unix/uxhistry/brf-hist.htmhttp://perso.wanadoo.fr/levenez/unix 에서 찾을 수 있다. BSD 역사에 대한 더욱 많은 정보는 [McKusick 1999] 와 ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/share/misc/bsd-family-tree 에서 찾을 수 있다.

유닉스 계열 시스템 사용에 대한 찬성론을 설명하고 있는 지지 기사를 읽고 싶은 사람들은 http://www.unix-vs-nt.org 를 보아야 한다.

2.1.2. 자유 소프트웨어 재단

1984년 Richard Stallman 의 자유 소프트웨어 재단 (Free Software Foundation, FSF) 은 유닉스 운영체제의 무료 버전을 만들기 위해 GNU 프로젝트를 시작했는데 Stallman 은 자유로이 사용될 수 있고, 읽혀질 수 있고, 수정될 수 있고, 재배포될 수 있는 소프트웨어의 의미로 free 를 사용했다. FSF 는 C 컴파일러 (gcc), 텍스트 에디터 (emacs) 와 많은 기본적인 도구를 포함해 엄청나게 많은 유용한 컴포넌트들 성공적으로 구축하였다. 그러나 1990년대 FSF 는 운영체제 커널을 개발하는데 어려움을 겪었으며 커널이 없다면 그들의 나머지 소프트웨어들은 소용없었을 것이다.

2.1.3. 리눅스

1991년 Linus Torvalds 는 ``리눅스"라고 이름지은 운영체제 커널을 개발하기 시작했다 [Torvalds 1999]. 이 커널은 자유로이 수정될 수 있고 매우 유용한 운영체제를 만들기 위해 FSF 산물과 다른 컴포넌트들 (특히 BSD 컴포넌트들의 일부와 MIT 의 X 윈도우 소프트웨어) 과 병합될 수 있었는데 이 책에서 커널 자체는 ``리눅스 커널"로 전체 결합은 ``리눅스"로 지칭할 것이다. 많은 사람들은 대신 ``GNU/Linux" 라는 용어를 사용함을 주목해라.

리눅스 공동체에서 여러 조직들은 사용할 수 있는 컴포넌트들을 다르게 조합하였는데 각 조합은 ``배포판"으로 부르며 배포판들을 개발한 조직들은 ``배포업자"라고 부른다. 일반적으로 널리 알려진 배포판으로는 레드햇 (Red Hat), 맨드레이크 (Mandrake), 수제 (SuSE), 칼데라 (Caldera), 코렐 (Corel) 및 데비안 (Debian) 이 있다. 다양한 배포판들간에는 차이점들이 있지만 모든 배포판들은 동일한 기반인 리눅스 커널 및 GNU glibc 라이브러리들에 기초하고 있다. 두가지 모두는 ``copyleft" 스타일의 라이센스로 다뤄지기 때문에 이러한 기반에 대한 변경은 일반적으로 모든 사람이 사용할 수 있어야 한다. 이는 BSD 와 AT&T 에서 파생된 유닉스 시스템간에는 존재하지 않는 리눅스만의 기반에서 리눅스 배포판들을 통합시키는 힘이 원천이다. 이 책은 특정 리눅스 배포판에 고유한 것은 아니며 리눅스를 논의할 때 이 책은 본질적으로 모든 현재 주요 리눅스 배포판들에 대해 유효한 가정인 리눅스 커널 버전 2.2 이상과 C 라이브러리 glibc 2.1 이상을 가정한다.

2.1.4. 오픈 소스/자유 소프트웨어

자유로이 공유되는 소프트웨어에 대한 관심이 증가함에 따라 이에 대한 정의 및 설명이 더욱 더 필요하게 되었다. 널리 사용되는 용어는 ``오픈 소스 소프트웨어"로 [OSI 1999] 내에 더욱 자세하게 정의되어 있다. Eric Raymond [1997, 1998] 은 다양한 개발 과정들을 고찰한 몇몇의 독창성있는 기사들을 작성했다. 다른 널리 사용되는 용어는 ``자유 소프트웨어 (free software)" 로 ``free" 는 ``freedom" 을 나타내는데 보통 설명은 ``free beer 가 아닌 free speech" 이다. 그러나 두 표현 모두 완벽한 것은 아니다. ``자유 소프트웨어"라는 용어는 대개 실행파일은 무료로 제공되지만 소스 코드를 볼 수 없고, 수정할 수 없고 또는 재배포할 수 없는 프로그램들과 혼동된다. 반대로 ``오픈 소스"라는 용어는 때때로 소스 코드를 볼 수는 있지만 사용, 수정 또는 재배포에 제한이 있는 소프트웨어를 의미하는데 사용 (악용) 되고 있다. 이 책은 보통의 즉, 소스 코드의 사용, 보기, 수정 및 재배포를 자유로이 할 수 있는 소프트웨어에 대해 ``오픈 소스"라는 용어를 사용한다; 더욱 세부적인 정의는 Open Source Definition 에 포함되어 있다. 어떤 경우 목적의 차이가 제안되고 있는데 ``자유 소프트웨어"라는 용어를 선호하는 사람들은 자유의 필요성을 강력히 강조하길 바라는 반면 다른 사람들은 다른 목적 (예, 높은 신뢰성) 를 가지거나 단순히 덜 불쾌하게 보이고 싶을 수도 있다. 자유 소프트웨어 정의와 그 이면에 숨겨져 있는 목적에 대한 정보는 http://www.fsf.org 에서 찾을 수 있다.

오픈 소스 소프트웨어와 자유 소프트웨어에 대한 지지 기사들을 읽고 싶은 사람들은 http://www.opensource.orghttp://www.fsf.org 를 보아야 한다. 그러한 소프트웨어를 고찰한 다른 문서들도 있는데 예를 들어 Miller [1995] 는 오픈 소스 소프트웨어가 지적 재산권이 있는 소프트웨어보다 더욱 현저하게 신뢰할 수 있음을 발견했다 (임의의 입력때문에 생기는 파손에 대해 얼마나 저항하는지를 측정하는 수단을 사용하였다).

2.1.5. 리눅스와 유닉스 비교

이 책은 의도적으로 유닉스와 같은 시스템을 기술하기 위해 ``유닉스 계열 (Unix-like)" 이라는 용어를 사용한다. 특히 유닉스 계열은 모든 주요 유닉스 변형들과 리눅스 배포판들을 포함한다. 많은 사람들이 이러한 시스템들을 기술하기 위해 단순히 ``유닉스"라는 용어를 사용함을 주목해라. 원래 ``유닉스" 라는 용어는 AT&T 에 의해 개발된 특정 제품을 의미했다. 오늘날 오픈 그룹이 유닉스 상표권을 소유하고 있으며 유닉스를 ``worldwide Single UNIX Specification" 으로 정의하고 있다.

리눅스가 유닉스 소스 코드에서 파생되지 않았지만 그 인터페이스는 의도적으로 유닉스와 같다. 따라서 유닉스에서 배운 교훈이 보안에 대한 정보를 포함해 일반적으로 둘 모두에 적용된다. 이 책에서 정보의 대부분은 모든 유닉스 계열 시스템에 적용되는데 리눅스에 특정적인 정보가 리눅스를 사용하는 사람들이 리눅스의 능력을 사용할 수 있게 하려고 의도적으로 추가되었다.

유닉스 계열 시스템들은 많은 보안 메카니즘들을 공유한다. 물론 이 메카니즘들은 미묘한 차이가 있고 모든 시스템들에서 모든 메카니즘을 사용할 수는 없다. 모든 시스템들은 각 프로세스에 대한 사용자 및 그룹 ids (uids 및 gids) 와 user, group 와 other 에 대한 읽기, 쓰기와 실행하기 허가를 갖는 파일시스템을 포함하고 있다. 기본 보안 메카니즘을 포함해 유닉스 시스템에 대한 일반적인 정보는 Thompson [1974] 와 Bach [1986] 을 보라. 3장은 유닉스와 리눅스의 주요 보안 특징을 요약한다.