컴퓨터에 관심이 많으신 분들이라면 리눅스에 대해 한번쯤 들어보셨을 겁니다. 사실 맥OS를 사용하지 않거나 UNIX 계열 운영체제를 사용해보지 않은 분들은 이름만 들어봤고 매우 생소하실겁니다. 저의 경우엔 자가 구축한 NAS의 헤놀로지 시스템의 OS가 일종의 리눅스 기반인데 그래서 리눅스를 직접적으로 사용해볼 수 있었습니다.
사실 위에서 UNIX 계열 운영체제라고 했는데 UNIX가 뭔지는 설명하지 않았습니다. 또 페도라, 리눅스, 우분투 주변에서 줏어 들은건 많은데 정확히 무슨 의미인지 모르시는 분들을 위해 정리하고자 본 글을 작성합니다.
* 본 글은 블로그, 서적 등을 참고해서 작성했으며 틀린 내용이 있으면 댓글로 알려주세요!
운영체제
운영체제(OS, Operating System) 란 사용자와 컴퓨터 하드웨어 사이의 소프트웨어 인터페이스를 지칭합니다. 운영체제를 사용하면 사용자는 컴퓨터의 HW자원을 활용해 SW적으로 간편하게 컴퓨터를 사용할 수 있습니다. OS는 프로그램 실행을 제어하고, CPU, 메모리, 디스플레이, 키보드, 마우스 등등 다양한 리소스를 관리해줍니다.
우리가 많이 사용하고 들어본 운영체제의 경우 윈도우 정도가 있겠지만 실제로 운영체제는 생각보다 많습니다.
우리가 접할만한 OS 목록은 아래와 같습니다.
- Windows (우리가 사용하는 대부분의 PC에서 사용하는 OS, 게임 개발 시 대부분 윈도우에서 돌아간다고 상정하고 개발)
- 안드로이드 (구글에서 개발한 스마트폰용 OS)
- IOS (애플사에서 개발한 아이폰 OS)
- OS X(애플사에서 개발한 맥PC OS)
- 리눅스 (PC, 서버의 OS)
여기서 안드로이드의 경우엔 리눅스와 연관이 있고 OS X, IOS는 BSD라는 OS 계열입니다. 또한 리눅스, BSD 모두 유닉스(UNIX) 에서 유례되었습니다.
* UNIX가 무엇인지는 아래에서 다룹니다.
유닉스
유닉스에 대해서 이야기 하려면 우선 1900년도 초중반 쯤으로 돌아가서 그 당시의 기술력에 대해 알 필요가 있습니다. 그 시대의 컴퓨터는 집을 꽉 채우거나 심하면 운동 경기장만한 아주 거대한 크기를 가지고 있었습니다.
(1940년도에 만들어진 초창기 컴퓨터인 애니악의 사진만 봐보셔도 바로 이해하실겁니다.)
사실 이런 공간 차지보다도 더 큰 문제가 있었는데 바로 컴퓨터마다 운영체제(OS)가 통일되지 않고 달랐다는 점입니다.
특정 시스템에서 돌아가는 소프트웨어는 반드시 커스터마이즈 과정을 거쳐야 했으며 한 시스템에서 돌아가는 프로그램은 다른 시스템에서는 동작하지 않았습니다. 또한 어떤 시스템으로 작업을 수행할 수 있는 전문가가 있다고 해도 다른 시스템도 다룰 수 있는게 아니였습니다.
또한 컴퓨터는 굉장히 고가의 기기였고 한 시스템을 구입하여 사용자들이 작동법을 익혔다 하더라도 추가적인 비용이 드는 구조였습니다. 컴퓨팅 파워를 사용하기 위해선 막대한 비용이 소요되었고 기술적으로 진보가 잘 이루어지지 않아 몇십년 동안이나 이러한 거대한 사이즈의 컴퓨터를 가지고 작업을 진행해야 했습니다.
그러던 중 1969년 AT&T의 Bell 연구소에서 데니스 리치를 포함한 기술자 팀이 이러한 호환성 문제를 해결하고자 작업을 시작하였습니다. 이들은 MULTICS 라는 운영체제(1946년 개발된 시분할 개념을 도입한 초기 운영 체제) 의 여러 개념을 구현해 보기 위해 켄 톰슨과 함께 PDP-7 이라는 컴퓨터 시스템을 사용하여 새로운 운영체제를 개발하기 시작했습니다.
이들이 개발하는 운영체제는 다음과 같은 사항들을 지향했습니다.
1. 간결하면서도 명쾌하다
2. 어셈블리어 대신 C언어로 작성한다.
3. 코드를 재사용할 수 있어야 한다.
벨 연구소 개발자들은 그들의 프로젝트를 바로 "UNIX" 라고 명명 했으며 PDP-11/45 기종으로 초기의 유닉스를 이식하면서 OS를 C언어로 다시 작성하였습니다.
사실 우리가 잘 아는 C언어는 유닉스라는 운영체제를 만들기 위한 언어로 시작했습니다.
그 당시에 어플리케이션이 아닌 운영체제를 어셈블리어가 아닌 언어로 작성하는건 일종의 금기였는데 왜냐면 어셈블리어 말고 고수준 언어로 작성했다가 망한 선례가 있었기 때문입니다.
그 선례가 바로 MULTICS 입니다. 아까도 말했듯이 MULTICS 라는 운영체제를 기반으로 UNIX 프로젝트를 진행했으며 그렇기에 MULTICS 는 UNIX의 전신이 되게 되는데 MULTICS 운영체제가 PL/1 이라는 고수준 언어로 작성했다가 상업적 부분에서 큰 실패를 거두었습니다. (한마디로 망했습니다.)
위에 보면 유닉스의 지향점이 "간결하면서도 명쾌하다" 인데 이게 MULTICS 에 대한 일종의 반성에서 시작된 것입니다. C언어와 유닉스는 소수의 예외를 제외하고 대부분을 C언어로 작성했는데 우려와는 달리 단점보다 장점이 훨씬 많았다는 것을 보이고 이 금기에 대해 정면으로 도전해서 승리하게 되었습니다.
그리고 지금의 운영체제는 C언어가 아니면 안된다는 새로운 금기가 생기게 되었습니다. 또한 더불어서 C언어도 대표적인 프로그래밍 언어로 자리매김 하게 된 것 입니다.
*지금 최신 OS인 윈도우 11의 경우에도 C, C++로 개발되었다고 합니다.
이야기가 C언어 설명으로 센 느낌이 있는데 각설하고 본론으로 돌아와서, 코드의 재사용성은 매우 중요한 개념입니다. 그 당시 시판되는 모든 컴퓨터 시스템들은 그 시스템에서만 사용되는 프로그램을 이용하였는데, 반면에 유닉스는 커널(kernel) 이라고 불리는 작은 부분의 시스템 적용코드만 요구되었습니다. HW가 바뀌어도 모든 종류에 하드웨어에 본질적으로 동일한 운영체제를 제공해 개발 편의를 높이고 컴퓨터 장치들이 호환성을 지닐 수 있게 하였습니다.
유닉스 운영체제와 모든 기능들은 이러한 커널 위에 구축되었으며 1979년에 유닉스 7번째 버전 V7이 발표되었으며 이는 모든 현존하는 유닉스 시스템의 대부격이 되었습니다.
소프트웨어 판매사들은 이러한 신기술을 재빨리 채용해서 추가적인 노력없이도 열 배 이상의 소프트웨어를 팔아 치울 수 있었고 사용자는 시스템이 바뀌어도 추가적인 교육이나 노력 없이도 작업을 계속 진행할 수 있었습니다. 유닉스는 서로 다른 기종에 같은 사용자 환경을 성공적으로 제공하게 된 것 이죠.
그 다음 20여년이 지나도 유닉스 개발은 계속되었으며 다양한 기능이 추가되었습니다. 물론 지금 이야기 하는 시점도 작은 개인용 PC가 보급되긴 전이라서 일반인이 유닉스 시스템을 접하려면 대학 연구소에서 일하던가 정부 기관, 대형 금융 회사에서 일을 해야 됬습니다.
유닉스가 유명해짐과 동시에 유닉스를 모방한 많은 운영체제들이 나타났는데, 이들을 표준화 하기 위해서 POSIX 라는 표준이 등장했습니다. POSIX 표준을 만족하는 것들을 유닉스 계열 운영체제라고 합니다. 여기서 리눅스, Mac OS X 가 바로 대표적인 유닉스 계열 운영체제입니다. 드디어 리눅스의 정체에 대해 알았군요! 리눅스가 UNIX 계열 운영체제라는 문장이 나오면 이제 이해할 수 있겠죠?
(대부분의 리눅스 배포판들은 POSIX의 거의 모든 상세 스펙을 따르고 있다고 합니다.)
소형 컴퓨터들이 그 이후에 개발되었으며 80년대 후반에는 많은 사람들이 가정용 컴퓨터(PC)를 갖게 되었습니다. 그 시점에서는 PC를 위한 몇몇의 유닉스가 있었지만 무료로 자유롭게 사용할 수 있는 운영체제는 없었으며 그래서 많은 사람들이 MS-DOS나 윈도우즈 3.1을 사용하게 되었습니다.
GNU란?
스톨만은 비영리 기관인 자유 소프트웨어 재단(FSF)의 설립자 입니다. 그가 속한 연구팀은 PDP-10 이라는 컴퓨터에서 동작하는 시분할 운영체제를 어셈블리어로 개발하였습니다. 그 당시만 해도 누구나 그 OS의 소스코드를 얻을 수 있었으며 수정하며 사용하는데 제약이 없었죠.
그런데 이후에 컴퓨터 제작사에서 제공하는 운영체제를 사용하는데 있어서 이러한 자유는 허락되지 않았으며, 그 소스코드를 보는것이 금지되었습니다. 이게 바로 그가 'GNU 선언문' 과 함께 자유 소프트웨어 재단을 설립한 이유가 되겠습니다. (이름이 왜 자유 소프트웨어 재단인진 추측이 가시죠?)
GNU가 뭐냐 하면 Gnu is Not Unix 의 약자입니다. 약자의 이름에 자기 자신이 포함되어 있죠. (이렇게 원래 문장 안에 약자가 그대로 들어가 있는걸 재귀 약자라고 합니다.) Gnu는 유닉스가 아니다? 이게 무슨뜻일까요..?
GNU는 유닉스와 완벽하게 호환되는 소프트웨어 시스템의 이름이며, 원하는 모든 사람이 자유롭게 사용할 수 있도록 만들어진 겁니다.
유닉스랑 완벽히 호환되는 녀석이면서 유닉스가 아니다? 그대로 받아들이면 조금 이해가 안되시겠지만 일종의 역설이라는 겁니다. GNU의 디자인이 유닉스 계열이지만 자유 소프트웨어 인점에서 차별을 두려는 것이죠.
그들은 GPL이라는 가장 널리알려진 강한 카피레프트 사용 허가 개념을 채택했는데, 우선 GPL 라이선스가 적용된 프로그램은 자유 소프트웨어의 권한이 보장되며 소스코드를 요청시 공개해야 합니다, 이걸로 뭔가를 또 만들어도 GPL 라이선스가 그대로 적용되서 그것 역시 공개하는걸 원칙으로 합니다.
매우 강력한 오픈 소스 라이선스 원칙이죠! 아마 GitHub에서 소스코드를 오픈소스로 공개할때도 라이선스를 고를때 General Public License 라는게 있는데 이게 바로 자유 소프트웨어 재단에서 만든 GPL 라이선스 입니다.
갑자기 궁금한 리눅스 얘기는 안나오고 GNU 는 나오고 삼천포로 빠지는 느낌이지만.. 연관이 있으니 설명을 한 것 이겠죠? 상용 유닉스에 호환되는 자유 소프트웨어의 운영 체제를 만들기 위해 컴파일러(GCC), 커널 등을 만들다가 진행이 지지부진 하던 도중 '리눅스 탄생의 핵심인 리눅스 토발즈가 만든 리눅스 커널' 과 FSF가 개발한 GNU 소프트웨어가 결합된 것이 바로 GNU/LINUX 이고 너무 기니깐 그냥 짧게 'LINUX'(리눅스) 라고 부르는 것이 바로 우리의 리눅스가 되겠습니다.
뭐 사실 리눅스가 커널 부분이라 리눅스랑 , GNU/리눅스를 구분해서 부르자는 의견도 있는데 일반적으론 그냥 '리눅스' 라고 부른다고 보면 될 거 같습니다. 아마 제가 생각하기엔 FSF 입장에서 생각해보면 리눅스는 커널뿐이고 GNU 소프트웨어도 같이 들어가 있는데 GNU는 빼고 '리눅스' 라고 통짜로 불러버리니 기분이 나빠서 그런게 아닐까..? 합니다. 관련 논쟁에 관해선 아래 링크로.
* 커널 = 쉘이나 응용프로그램에서 기본적인 서비스를 제공하는 OS의 핵심 부분
리눅스 소개
드디어 리눅스 소개가 나왔네요. 제목에 나와 있는 내용이 맨 밑에 나와있다니 마치 유투브 썸네일 어그로같죠? ㅋㅋ (사실 유투브 썸네일 어그로는 실제로 영상에 없는 경우도 많답니다) 그래도 선행해서 알아야 이해가 될 것 이기 때문에.. 이제 리눅스에 대해 이야기를 해보죠.
리눅스는 아까도 말했듯이 유닉스 계열 운영체제입니다. GNU 소프트웨어가 들어가 있는데 GNU의 경우에도 애초에 UNIX와 완전 호환되는 운영체제를 만드는게 처음 목표였으므로 어찌됬건 유닉스 계열이 된다는 점에는 변함이 없네요.
여기 당당하게 빅엿을 날리고 계시는 분이 바로 리눅스의 창시자 리누스 토발즈입니다. 옛날에 풋풋한 대학생 시절 젊은 사진은 안뜨고 구글에 치면 죄다 욕한 사진만 떠서 일단은 기억에 남으시라고 이 사진을 가져왔습니다.
1991년 핀란드의 대학생 리눅스 토발즈는 '리눅스' 라고 이름 지은 운영체제 커널을 개발하기 시작하였습니다.
리눅스라는 이름이 GNU를 패러디해서 'Linux Is Not UniX' 라는 것처럼 부르는 것 또한 있는듯 합니다. 여기서 더 떠서 Linux의 약자가 저 문장 이라고 작성해둔 곳도 있는거 같은데 아무리 봐도 사실무근 인거 같네요.
이 커널은 자유로이 수정될 수 있고 매우 유용한 운영체제를 만들기 위해 FSF 산물과 다른 컴포넌트들과 병합될 수 있었습니다. 근래에 들어선 설치도 나름 간편해지고 많은 하드웨어 지원, GUI 데스크탑 까지 지원하여 집에서 PC에 설치하기에도 크게 무리가 없습니다. (하지만 코딩할거 아니면 일반 사용자들은 게임도 잘 안되고 100% 불편하므로 설치하지 않는게 좋을겁니다)
리눅스 공동체의 여러 조직들은 사용할 수 있는 컴포넌트들을 다르게 조합하였는데 각 조합은 '배포판' 으로 부릅니다. 널리 알려진 배포판으로는 데비안, 우분투, 민트, 레드햇, 페도라 등등이 있습니다. 이제 구분이 좀 가시나요?
리눅스에서 컴포넌트들만 조금식 섞고 바꿔서 배포하는게 위 목록들입니다. 일단 베이스 자체는 당연히 리눅스 일꺼고 근본적으론 유닉스 계열이겠네요.
인터넷으로 접속하는 GUI 환경이 필요하지 않은 많은 서버 컴퓨터의 운영체제들이 리눅스를 채택하고 있고 안드로이드와 같은 운영체제 역시 리눅스 기반으로 만들어져 우리 생활 전반에 보이지 않게 영향력을 발휘하고 있다고 볼 수 있습니다.
리눅스의 특징 중 몇가지를 소개해보자면 다중 플랫폼을 지원하며, 트리 형태의 계층적으로 구성된 파일 시스템, 오픈 소스이며 무료로 제공되어 사용하는데 아무런 제한이 없다는 특징이 있겠네요. (아무래도 이게 리눅스가 발전할 수 있는 가장 큰 원동력이자 장점이 아닌가 싶습니다.)
리눅스 운영체제에 대한 설명은 여기까지 입니다. 약간 역사적 흐름을 따라가는 거라서 작성하는데 꽤나 시간도 오래 걸리고 힘들었네요. 리눅스 처음 공부하게 되면 명령어 따라 치기나 하고 있고 뭔지도 모르고 그냥 무지성 타이핑 기계가 되는데 이게 너무 싫어서 직접 정리해보았습니다.
실제로 리눅스 마스터 시험에 FSF에 관해 묻는 문제가 나오기도 하니깐 저 같은 리린이인데 이런 내용이 궁금하면 꼭 읽어보세요 ^^
출처
https://studymake.tistory.com/93
https://namu.wiki/w/C%EC%96%B8%EC%96%B4
'CS > Linux' 카테고리의 다른 글
[Linux] 우분투 터미널 색깔 갑자기 날라갔을때 해결 방법 (0) | 2022.11.06 |
---|---|
[WSL2] network is unreachable 인터넷 안됨 해결하기 (sudo apt-get, wget 등등 안될때) (0) | 2022.10.12 |
[VMware] 가상머신 우분투 환경에서 복사-붙여넣기 쉽게 활성화 하기 (0) | 2022.09.08 |
[Linux] 학습 가이드 (입문 도우미) - 리눅스 OS는 어떻게 배워야 하는가? (0) | 2022.07.18 |
[Linux] VSCODE로 쉘 스크립트 프로그래밍 하기 (Window, Linux 무관) (0) | 2022.05.19 |