이제는 정리할 때가 되었다.
유닉스, 리눅스, 우분투, 맥, 윈도 ....
대체 정확히 어떤 층위로, 어떤 이유로, 어떤 카테고리로 어떤 나뉘는 개념들인지?
+) 포스팅을 마치며
하루에, 한입에는 넣을 수 없는 방대하고도 깊은 지식임을 알게 되었다.
오늘은 이 정도로, 하지만 앞으로도 계속 계속 공부해야겠다.
OS - Operating System
(출처: https://ko.wikipedia.org/wiki/%EC%9A%B4%EC%98%81_%EC%B2%B4%EC%A0%9C)
CPU, 메모리, 스토리지처럼 시스템의 하드웨어와 리소스를 직접 관리하는 소프트웨어.
애플리케이션과 하드웨어 사이에서 모든 소프트웨어와 작업을 수행하는 물리적 리소스를 연결한다.
쉽게 자동차 엔진에 OS를 빗대어 생각할 수 있다. 엔진은 자체적으로 작동하기도 하지만, 변속기와 차축 및 바퀴에 연결되면 차를 움직일 수가 있다. 엔진이 제대로 작동하지 않으면 자동차는 움직이지 않게 된다.
- 하드웨어와 소프트웨어간의 소통을 도와주는 Interface
- Multi-user, Multi-tasking은 현대 OS의 필수 요소 (리눅스는 이에 + Multiprocessor)
UNIX - 운영체제의 뿌리, 조상
- OS 역사상 가장 중요한 OS. 윈도우를 제외한 리눅스, 안드로이드, macOS, iOS등의 많은 OS가 유닉스를 그 뿌리로 두고 있음. (사실상 모두 유닉스의 변종 혹은 자손 같은 것)
- 1970년대에 초에 개발되었으며 교육 및 연구 기관에서 주로 사용되는 범용 다중 사용자 방식의 시분할 운영 체제.
- AT&T system V, BSD, UNIXWARE, Solaris, SCO UNIX, IRIX, HP-UX 등이 있음
- 본디 멀티유저용 서버 운영체제로 개발되었으나, 현재는 개인용 데탑이나 임베디드용으로도 사용.
- C언어 자체가 Unix 시스템 프로그래밍을 하기 위해 만들어졌음. C언어로 작성되어 이식성이 높고, 장치&프로세스 간의 호환성이 높은 장점이 있다.
- 인터넷의 역사와도 떼어놓을 수 없는 운영체제인데, 운영 체제가 인터넷에 접근하는 표준 인터페이스인 소켓이 BSD 유닉스에서 만들어진 개념이기 때문. 일반적으로 '소켓'하면 BSD 소켓을 가리킴.
- 서버 시장에서 인기가 좋은 이유는 CLI가 강하기 때문. 사실상 서버 시장의 절대 강자인 리눅스도 유닉스에서 파생된 OS이며 그 뒤를 따르는 BSD 역시 유닉스 계열. (윈도우가 절대 강자로 군림하는 데스크탑 시장과 정반대)
- 스마트폰용 OS를 양분하다시피하는 안드로이드와 iOS는 둘 다 유닉스 계열. 이 밖에도 Firefox OS, 우분투 모바일 역시 유닉스 계열 커널을 사용한 OS.
- 유닉스 기반 OS의 구성
1) 하드웨어를 보호하며 프로그램과 하드웨어 간의 인터페이스 역할을 담당하는 유닉스의 가장 핵심적인 부분인 Kernel,
2) 사용자의 명령어를 인식하여 프로그램을 호출하고 명령을 수행하는 명령어 해석기인 shell,
3) 일반 사용자가 작성한 응용프로그램을 처리하는 Utility Program으로 구성된다.
(출처: https://coding-factory.tistory.com/315)
[좀더자세히] Kernel
(그림 출처: https://ko.wikipedia.org/wiki/%EC%9A%B4%EC%98%81_%EC%B2%B4%EC%A0%9C)
- 메모리에 있는 정보를 읽어오고, 쓰고, CPU를 할당하는 system call이라고도 할 수 있다.
- 정확히 system call은 OS의 kernel이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 kernel에 접근하기 위한 인터페이스. (응용 프로그램에서 kernel의 서비스를 사용하는 방법)
POSIX
- 유닉스를 모방한 많은 OS가 나타남에 따라 이들을 표준화하기 위한 API 표준
- POSIX를 만족할 경우 Unix-like OS로 부를 수 있음. 대표적으로 리눅스와 macOS.
- NetBSD, FreeBSD, OpenBSD 같은 오픈 소스 BSD 계열은 공식 인증된 Unix는 아님.
- MS사의 경우, 유닉스 계열은 아니지만 POSIX 표준을 따르는 서브 시스템을 제공. (WSL)
- 유닉스 계열 운영체제의 역사
LINUX - 컴퓨터 역사상 가장 많은 참여자가 관여하는 오픈 소스 프로젝트 OS, Unix의 아들
- 이름에서부터 느껴지듯 UNIX를 계승한다.리누스(리누스 토르발스)의 유닉스라는 뜻. (리누스 토발즈의 유닉스 클론)
- the minimum running software component in a modern operating system that handles the execution of programs, manages software, memory, IO, and so on.
- 데스크톱/랩톱 용도 뿐만아니라 웹서버, 클라우드 안드로이드 및 포터블 게이밍 콘솔등의 모바일 기기, 각종 임베디드 기기 등을 구동하는 OS. 전화기에서 슈퍼컴퓨터에 이르는 다양한 하드웨어에서 실행된다.
- 리눅스 배포판 커널의 종류
1) 레드햇 (페도라, CentOS, Tizen, 아시아눅스)
2) 데비안 (데비안, 마에모, 크노픽스, 크런치뱅 리눅스, 칼리 리눅스)
3) 우분투 (우분투, 그뉴센스, 루분투, 리눅스 민트, 우분투 그놈, 우분투 스튜디오, 주분투, 코분투, 쿠분투, 구분투)
4) SUSE (오픈 수세, 오픈수세 이전)
5) 슬랙웨어 (슬랙웨어, 벡터리눅스, 프로갈웨어)
- 리눅스 기반 OS의 구성
1) 리눅스 OS의 핵심 기술이자 하드웨어 리소스를 관리하는 리눅스 커널 (보통의 리눅스 입문 엔드유저는 우분투나 페도라를 사용)
2) 시스템 수준의 태스크를 위한 관리 계층인 시스템 사용자 공간 (ex. shell, CLI, daemon, desktop UI 환경)
3) 태스크를 수행할 수 있도록 지원하는 소프트웨어 유형인 애플리케이션
- WSL(Windows Subsystem for Linux)라는 이름으로 유닉스 기반이 아닌 윈도우에도 리눅스 커널을 설치할 수 있다. WSL을 위해 제공되는 시스템에는 대표적으로 우분투, 데비안, openSUSE, SUSE Enterprise, 칼리 리눅스 등이 있다.
- 윈도우보다 리눅스 환경에서 성능이 높은 프로그램들이 많다. 또한 서버, 클라우드, 웹 서버, VM, 임베디드, 프로그래밍등을 배운다면 리눅스를 반드시 배워야한다.
- 서버 용도로서의 리눅스의 위상은 정말 대단한데(요즘 윈도 서버도 성능이 어느 정도 높아짐에 따라 점유율이 어느 정도 늘었지만, closed source인데다 가격도 비싸고 비주류인지라 여전히 게임이 안됨) 상당수의 NAS나 공유기들 역시 리눅스 or BSD OS를 올려서 사용한다.
- 리눅스는 POSIX 표준의 일부로서, 유사한 아키텍쳐와 개념을 공유하지만 오리지널 유닉스나 minix와 비자유 소스코드를 공유하지는 않는다.
- 리눅스 디렉토리의 구조
(출처: https://coding-factory.tistory.com/499?category=760718)
+) 이런 글도 있었다. 간장 치킨으로 비유하자면 요리사의 레시피를 가지고 만든 간장치킨은 유닉스, 집에서 간장치킨의 맛을 떠올리면서 만들어낸 간장치킨은 리눅스.
(출처: http://blog.naver.com/PostView.nhn?blogId=limoremo&logNo=220533015236)
왜그렇게들 리눅스 리눅스 했을까?
리눅스는 비 리눅스 기반의 OS에 비해 Layering에서 강점을 보인다. MS-DOS의 경우 레이어링이 잘 되어 있지 않고(Monolithic kernel) module화에 약하다. 따라서 overhead는 상대적으로 적지만 유지보수가 어렵다는 치명적 단점이 있다. 하지만 리눅스는 Layering이 잘되어 module화가 잘되어있는 microkernel architecture기반이기 때문에 이와 반대로 유지보수가 쉽다.
UBUNTU - 'I am what I am because of who we all are' 정신으로 만들어진 Linux의 아들
- 데비안 리눅스를 기반으로 개발되었으며, 데비안에 비해 사용 편의성에 초점을 맞춘 리눅스 배포판. 유닉스를 계승하는 리눅스 배포판이므로 자연히 유닉스 계열 OS라고 말할 수 있다.
- I am what I am because of who we all are 정신(전 세계 사람 누구나 어렵지 않게 리눅스를 사용하자!)이 깃들어 있으므로 당연히 오픈소스이고 다양한 언어를 지원하며 그다지 높은 사양의 컴퓨터가 필요하지 않다. 사용자가 손쉽게 OS를 설치하고 사용할 수 있도록 설계 되었다. 리눅스 뿐만 아니라 컴퓨터 자체를 처음 접하는 이들에게 있어서도 최고의 리눅스 배포판.
- 시스템 관리 작업에서 sudo 도구를 사용한다는 점이 특징. 이에 root 사용자의 암호를 따로 만들지 않아도 되고, 여러 사용자가 관리를 위해 root 암호를 공유할 때 생길 수 있는 잠재적 보안 문제를 예방할 수 있다. (이건 개인적인 생각인데, AWS 보안 공부할 때에 읽은 제로 트러스트모델과도 연관이 있지 않을까 싶다)
- 리눅스 자체가 이식성과 확장성이 뛰어난데, 데비안 계열의 APT 관리 도구로 인해 유지보수도 더 쉬울 뿐만아니라 우분투 자체에서 지원하는 지원 툴(Landscape 등) 덕에 범용성은 타의 추종을 불허.
macOS - Linux의 아들, 따라서 역시 Unix의 자손, Ubuntu와는 사촌지간 정도
- 오픈소스와 클로즈드 소스가 동시에 사용된다.
- OS 계열을 보면, 맥 OS와 유닉스가 동시에 보이는데 이는 Unix, Linux, Mac의 관계를 생각할 때 당연하다. 정확히는 애플이 개발한 유닉스/다윈 기반 맥 전용 운영체제 라고 하면 되겠다.
- 클래식 매킨토시 운영체제인 Mac OS와 macOS는 아키텍처가 완전히 다른 다른 운영 체제이다. 참고로 macOS가 등장한지 1년도 안된 시점 애플사는 Mac OS의 공식 지원을 종료했다. (장례식도 올렸다)
- 데스크탑 환경에서 MS windows 다음으로 점유율이 높으며, 비교적 평범한 GUI 인터페이스를 가지고 있어 사용자 친화적이며 단순하면서도 안정적이다.
- 윈도우에 비해 서드 파티 앱들도 애플의 가이드라인을 따르도록 디자인되었기 때문에 앱간 연동이 많이 발달된 것이 특징.
- 윈도우가 큰 상을 깔고 잡다한 반찬이 여러 개 나오는 한식이라면, 맥 OS는 조막만하게 여러 개를 놓는 일식에 가깝다고 한다. (리눅스는 요리하는 사람에게 모든 것이 달려있는 집밥에 빗대었다. 위에서 말한 간장치킨 비유와 그 맥락을 함께 하는듯하다. 개인적으로 이런 비유를 좀 많이 써주었으면 참 좋겠다. 이해가 참 잘되는데.)
Windows - Unix와 관계가 없는 독자 라인
- 데스크탑에 쓰이는 OS 중 가장 많은 점유율을 차지
- OS 계열에 당당히 '윈도우 계열' 이라고 적혀 있다. 즉, UNIX를 계승하지 않는다.
- Mac OS에 대항하여 당시 널리 쓰이던 MS-DOS에서 멀티 태스킹과 GUI 환경을 제공하기 위한 응용 프로그램으로 처음 출시되었다.
- 현재까지 데스크탑 개인용 컴퓨터에서의 점유율이 압도적이나, 서버용 운영 체제로의 영역 확장도 진행중. 다만 보안 문제에서 취약한 부분이 많다.
references:
https://coding-factory.tistory.com/315
https://upload.wikimedia.org/wikipedia/commons/7/77/Unix_history-simple.svg
https://svcministry.org/ko/dictionary/what-is-the-difference-between-linux-unix-mac-and-windows/
https://namu.wiki/w/%EB%A6%AC%EB%88%85%EC%8A%A4
https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4#%EA%B0%9C%EB%B0%9C_2
https://www.redhat.com/ko/topics/linux/what-is-linux
https://bi.snu.ac.kr/~bhkim/lectures/digi_com_10f_snu/00.Linux.pdf
https://namu.wiki/w/%EC%9A%B0%EB%B6%84%ED%88%AC
https://ko.wikipedia.org/wiki/MacOS
https://blog.naver.com/ncloud24/221196787176