Linux / 리눅스 역사 - 1991년 취미 프로젝트가 세계 인프라가 되기까지

리눅스의 역사는 1991년 핀란드 대학생 리누스 토르발스가 개인용 컴퓨터에서 사용할 커널을 만들면서 본격적으로 시작됐습니다. 그러나 오늘날 우리가 사용하는 리눅스 환경은 한 사람이 완성한 운영체제가 아니라, Linux 커널과 GNU 도구, 배포판, 전 세계 개발자 공동체가 수십 년 동안 결합해 만든 결과입니다.

먼저 알아둘 점: 리눅스는 커널입니다

Linux 커널과 전체 운영체제는 어떻게 다른가요?

엄밀히 말해 Linux는 운영체제의 핵심인 커널(kernel)입니다. 커널은 프로세서, 메모리, 저장장치와 같은 하드웨어 자원을 관리하고 응용 프로그램이 하드웨어를 안전하게 사용할 수 있도록 중간에서 조정합니다.

사용자가 실제로 설치하는 Ubuntu, Debian, Rocky Linux 같은 배포판은 Linux 커널에 셸, 시스템 도구, 라이브러리, 패키지 관리자와 응용 프로그램을 묶은 완성된 사용 환경입니다. 이 때문에 전체 시스템을 가리킬 때는 관용적으로 ‘리눅스’라고 부르지만, 역사적 구성 요소를 강조할 때는 ‘GNU/Linux’라는 이름도 사용합니다. GNU 프로젝트의 Linux와 GNU 설명은 두 용어의 관계를 자세히 다룹니다.

커널은 실제로 무슨 일을 하나요?

커널은 사용자가 직접 실행하는 일반 프로그램과 하드웨어 사이에 있습니다. 웹 브라우저가 파일을 읽거나 서버 프로그램이 네트워크 패킷을 보내는 작업도 결국 커널이 제공하는 시스템 호출을 통해 처리됩니다. Linux의 역사를 이해하려면 다음 네 가지 역할을 먼저 구분해 두는 것이 좋습니다.

  • 프로세스 관리: 여러 프로그램에 CPU 시간을 배분하고 실행 순서를 조정합니다.
  • 메모리 관리: 프로그램마다 사용할 메모리 공간을 나누고 서로 침범하지 않도록 보호합니다.
  • 장치 관리: 저장장치, 네트워크 카드, 그래픽 장치와 주변기기를 드라이버를 통해 제어합니다.
  • 파일과 네트워크 처리: 파일 시스템과 네트워크 통신에 필요한 공통 인터페이스를 제공합니다.

따라서 새 하드웨어 지원, 성능, 보안, 전력 관리와 서버 확장성의 변화는 대부분 커널 역사와 연결됩니다. 반면 데스크톱 화면, 패키지 설치 명령과 기본 응용 프로그램은 배포판이나 사용자 공간 소프트웨어의 역사에 더 가깝습니다.

리눅스 이전: UNIX의 설계와 GNU 프로젝트

Linux는 UNIX와 비슷한 방식으로 동작하도록 설계된 유닉스 계열(Unix-like) 커널입니다. UNIX의 다중 사용자·다중 작업 모델, 작은 도구를 조합하는 방식과 파일 중심 인터페이스는 이후 운영체제 설계에 큰 영향을 주었습니다. 다만 Linux는 UNIX 소스 코드를 가져온 제품이 아니라 독립적으로 개발된 커널입니다.

1983년 리처드 스톨먼은 누구나 실행하고 연구하고 수정하고 배포할 수 있는 UNIX 호환 자유 운영체제를 만들겠다는 GNU 프로젝트를 발표했습니다. 개발은 1984년 시작됐고, 1990년 무렵에는 컴파일러, 셸, 편집기와 각종 명령어 등 주요 구성 요소가 갖춰졌지만 실용적인 커널은 아직 완성되지 않았습니다. 이 배경은 GNU 시스템 공식 역사에서 확인할 수 있습니다.

1991년: 작은 개인 프로젝트가 공개되다

헬싱키대학교 학생이던 리누스 토르발스는 1991년 4월 무렵 인텔 386 PC에서 동작하는 운영체제 커널을 개인 프로젝트로 개발하기 시작했습니다. 같은 해 8월 25일, 그는 미닉스(MINIX) 사용자들이 모인 유즈넷 뉴스그룹에 개발 중인 무료 운영체제를 소개하고 의견을 구했습니다.

Linux Foundation의 2020 Linux Kernel History Report에 따르면 최초 공개 버전인 Linux 0.01은 1991년 9월 17일 배포됐습니다. 당시 코드는 88개 파일, 10,239줄 규모였고 i386 한 종류의 하드웨어 아키텍처에서 동작했습니다. 처음부터 지금과 같은 범용 시스템이었던 것은 아닙니다.

1992~1994년: 자유 소프트웨어와 배포판이 만나다

GNU GPL이 협업의 조건을 바꾸었습니다

1992년 Linux가 GNU 일반 공중 사용 허가서(GNU GPL)로 다시 배포되면서 사용자는 소스 코드를 보고 수정하며 같은 조건으로 공유할 수 있게 됐습니다. Linux 커널은 이미 갖춰지고 있던 GNU 도구들과 결합했고, 설치와 소프트웨어 관리를 맡는 배포판이 등장하면서 실제 사용 가능한 운영체제 환경으로 발전했습니다.

1993년 8월 이언 머독이 시작한 Debian은 공동체가 공개적으로 함께 만드는 배포판 모델을 발전시켰습니다. Debian 프로젝트 공식 역사에 따르면 Debian은 초창기부터 일관된 배포판과 체계적인 패키지 관리를 목표로 했습니다. 비슷한 시기에 상용 지원을 결합한 배포판도 성장하며 개인 사용자뿐 아니라 기업이 Linux를 도입할 기반이 마련됐습니다.

1994년 3월 13일에는 Linux 1.0이 공개됐습니다. kernel.org의 Linux 1.0 아카이브에는 당시 소스와 변경 기록이 보존돼 있습니다. 1.0이라는 버전 번호는 Linux가 실험 단계만의 프로젝트를 넘어 안정적인 공개 소프트웨어로 자리 잡기 시작했다는 상징적인 이정표였습니다.

배포판은 Linux를 사용할 수 있는 제품으로 만들었습니다

초기 사용자는 커널과 여러 도구를 직접 모으고 설정해야 했습니다. 배포판은 이 복잡한 과정을 대신해 설치 프로그램, 미리 빌드한 소프트웨어 패키지, 의존성 정보와 업데이트 저장소를 제공했습니다. 같은 Linux 커널을 사용하더라도 어떤 소프트웨어를 선택하고 얼마나 오래 업데이트하며 설정을 어떻게 관리하는지에 따라 서로 다른 배포판이 만들어집니다.

Debian은 자원봉사 공동체가 정책과 패키지 체계를 함께 관리하는 모델을 발전시켰습니다. 반면 Red Hat은 공개 개발의 결과를 안정적인 기업용 제품과 기술 지원으로 연결하는 길을 개척했습니다. Red Hat 공식 역사는 1990년대의 CD 배포에서 기업용 구독 모델과 커뮤니티 배포판으로 발전한 과정을 설명합니다. 이런 서로 다른 모델이 공존하면서 Linux는 개인 학습용부터 장기간 운영해야 하는 기업 서버까지 폭넓게 사용될 수 있었습니다.

리눅스 역사 핵심 연표

연도 주요 사건 의미
1983 GNU 프로젝트 발표 자유롭게 사용할 수 있는 UNIX 호환 운영체제라는 목표가 제시됐습니다.
1984 GNU 시스템 개발 시작 컴파일러, 셸과 핵심 사용자 공간 도구가 만들어졌습니다.
1991 Linux 프로젝트 공개와 0.01 배포 개인 프로젝트가 인터넷 공동 개발의 출발점이 됐습니다.
1992 Linux를 GNU GPL로 배포 소스 코드의 수정과 재배포가 가능한 협업 기반이 강화됐습니다.
1993 Debian 프로젝트 시작 공개적인 공동체 배포판과 체계적인 패키지 관리가 성장했습니다.
1994 Linux 1.0 공개 안정적인 공개 커널로 발전한 중요한 이정표가 됐습니다.
1996 Linux 2.0 공개 대칭형 다중 처리(SMP) 지원이 본격화돼 서버 활용 범위가 넓어졌습니다.
2000 Open Source Development Labs 설립 기업의 Linux 개발 지원과 엔터프라이즈 도입을 위한 기반이 강화됐습니다.
2003 Linux 2.6 공개 더 다양한 장치와 대규모 시스템을 뒷받침하는 장기적인 개발 기반이 마련됐습니다.
2005 Git 도입 대규모 분산 개발에 적합한 버전 관리 방식으로 커널 협업이 확장됐습니다.
2007 Linux Foundation 출범 OSDL과 Free Standards Group이 합쳐져 개발·표준화·법률 지원을 위한 조직이 만들어졌습니다.

1.0에서 2.6까지: PC 커널이 범용 기반으로 성장한 과정

Linux 1.0은 인텔 386 계열 PC를 중심으로 사용됐지만 이후 버전은 더 많은 프로세서와 장치를 지원하는 방향으로 빠르게 확장됐습니다. 커널 안에 모든 장치 기능을 고정해 넣는 대신 필요한 기능을 모듈로 불러올 수 있어 다양한 하드웨어 조합에 대응하기도 쉬워졌습니다.

1996년의 Linux 2.0은 여러 프로세서를 함께 사용하는 대칭형 다중 처리(Symmetric Multiprocessing, SMP)를 지원하며 서버 운영체제로 성장하는 중요한 계기가 됐습니다. 이후 2.4와 2.6 계열에서는 새 장치 지원, 스케줄링, 메모리 관리와 대규모 시스템 확장성이 계속 개선됐습니다. kernel.org의 2.6 아카이브를 보면 2.6.0이 2003년 12월 공개된 뒤 안정 버전과 장기 유지 버전이 계속 이어진 과정을 확인할 수 있습니다.

이 시기에 Linux는 ‘저렴한 PC에서 UNIX와 비슷한 환경을 쓰는 방법’을 넘어 다양한 아키텍처에서 동작하는 범용 커널로 자리 잡았습니다. 하드웨어 제조사가 드라이버를 기여하고 기업이 성능과 안정성 개선에 참여하면서 공동체와 상업적 이해관계가 하나의 메인라인 커널에서 만나는 구조도 형성됐습니다.

2005년 Git은 개발 규모를 감당하기 위해 태어났습니다

커널 공동체에는 새로운 버전 관리 도구가 필요했습니다

Linux의 코드가 커지고 참여자가 늘자 누가 어떤 변경을 만들었고 여러 개발 흐름을 어떻게 합칠지 관리하는 일이 중요해졌습니다. 커널 공동체는 한동안 BitKeeper라는 버전 관리 도구를 사용했지만 2005년 무료 사용 관계가 끝나면서 새로운 도구가 필요해졌습니다.

리누스 토르발스는 빠른 변경 기록, 분산 작업과 대규모 병합에 초점을 맞춘 Git을 만들었습니다. Git 공식 문서의 간략한 역사는 Git이 Linux 커널 개발 공동체의 요구에서 출발했다고 설명합니다. 이후 Git은 커널을 넘어 오늘날 소프트웨어 개발 전반에서 사용하는 대표적인 버전 관리 시스템이 됐습니다.

현재의 커널 변경은 어떻게 합쳐지나요?

개발자가 작성한 변경 사항은 패치 형태로 공개되고 관련 하위 시스템의 담당자와 다른 개발자에게 검토받습니다. 네트워크, 파일 시스템, 드라이버와 프로세서 아키텍처처럼 분야별 저장소에서 검증된 변경이 단계적으로 메인라인에 합쳐집니다. 새 버전이 나온 직후에는 큰 기능을 받는 병합 기간이 열리고, 이후 출시 후보 단계에서는 회귀 오류와 안정성 문제를 고치는 데 집중합니다.

이 구조는 누구나 곧바로 최종 커널에 코드를 넣는 방식이 아닙니다. 공개 참여가 가능하면서도 리뷰, 테스트, 담당자 책임과 단계적인 통합 절차를 두어 품질을 관리합니다. Linux 커널 개발 HOWTO는 메인라인, 안정 버전, 하위 시스템 트리와 패치 제출 절차를 설명합니다.

서버에서 모바일과 클라우드까지

서버와 엔터프라이즈 시장에서 성장했습니다

1990년대 후반부터 Linux는 안정성, 네트워크 기능, 다양한 하드웨어 지원을 바탕으로 서버 영역에서 빠르게 성장했습니다. 배포판 업체는 장기 업데이트와 기술 지원을 제공했고, 기업은 웹 서버, 데이터베이스와 업무 시스템에 Linux를 채택할 수 있게 됐습니다.

2000년대에는 가상화와 클라우드 컴퓨팅이 확산되면서 자동화하기 쉽고 필요에 맞게 수정할 수 있는 Linux의 장점이 더욱 중요해졌습니다. 컨테이너 역시 Linux의 프로세스 격리와 자원 제어 기능을 토대로 발전했습니다. 오늘날의 커널 개발은 한 조직이 모든 코드를 만드는 방식이 아니라, 하위 시스템 담당자들이 패치를 검토하고 통합하는 분산 협업 구조로 진행됩니다. 최신 개발 절차는 Linux 커널 개발 공식 문서에서 확인할 수 있습니다.

컨테이너와 클라우드는 왜 Linux와 잘 맞았나요?

가상 머신은 일반적으로 각 인스턴스가 별도의 운영체제 커널을 실행하지만, 컨테이너는 호스트의 Linux 커널을 공유하면서 프로세스를 분리합니다. 네임스페이스(namespace)는 프로세스가 보는 사용자, 네트워크, 파일 시스템과 프로세스 ID 범위를 나누고, 컨트롤 그룹(control group, cgroup)은 CPU·메모리와 입출력 자원의 사용량을 묶어서 제한하거나 측정합니다.

컨테이너가 Linux 커널 기능 하나와 같은 것은 아닙니다. 이미지 형식, 실행 도구, 네트워크와 저장장치 관리가 함께 필요합니다. 그러나 격리와 자원 제어라는 핵심 토대가 커널에 포함돼 있었기 때문에 대규모 서버에서 애플리케이션을 빠르게 배치하는 생태계가 발전할 수 있었습니다. 자세한 동작은 Linux 커널의 cgroup v2 문서에서 확인할 수 있습니다.

모바일과 임베디드 기기로 영역을 넓혔습니다

Linux는 PC와 서버에만 머물지 않았습니다. 라우터, 자동차, 산업 장비와 각종 임베디드 기기에 맞게 이식됐으며 스마트폰에도 깊이 들어왔습니다. 예를 들어 Android 오픈소스 프로젝트의 커널 설명에 따르면 Android 커널은 업스트림 Linux 장기 지원(LTS) 커널을 기반으로 합니다.

기업 참여는 공개 개발과 모순되지 않았습니다

Linux의 초기 성장은 개인 개발자와 대학·취미 공동체의 참여에 크게 의존했습니다. 사용 범위가 넓어지자 서버 제조사, 반도체 기업, 배포판 업체와 클라우드 사업자도 자사 제품에 필요한 기능을 개발하고 메인라인에 반영하기 시작했습니다. 메인라인에 포함된 코드는 여러 배포판과 사용자에게 전달되고 공동 검토와 유지보수를 받을 수 있기 때문입니다.

2000년에는 Linux의 기업 활용과 개발을 지원하기 위해 Open Source Development Labs(OSDL)가 설립됐습니다. 2007년 OSDL과 Free Standards Group이 합쳐져 Linux Foundation이 출범했습니다. Linux Foundation의 조직 역사 설명에 따르면 이 조직은 개발 인프라, 표준화, 행사, 교육과 법률·상표 지원을 제공하면서 커널 공동체가 독립적으로 개발을 이어 갈 환경을 지원합니다.

코드의 저작권이 특정 회사 하나로 모두 이전되는 구조도 아닙니다. 공식 커널 개발 문서는 메인라인에 들어간 코드가 원래 저작권자의 소유로 남는다고 설명합니다. Linux 커널 전체는 GNU GPL 버전 2 전용 조건으로 제공되며, 개별 소스 파일에는 호환되는 라이선스나 이중 라이선스가 적용될 수 있습니다.

리눅스 역사를 세 층으로 보면 혼동이 줄어듭니다

구분 무엇을 포함하나요? 역사에서 맡은 역할
Linux 커널 프로세스, 메모리, 장치, 파일 시스템과 네트워크 관리 하드웨어와 프로그램을 연결하는 공통 기반을 제공했습니다.
사용자 공간 GNU 도구, 셸, 라이브러리, 서비스와 데스크톱 환경 사용자와 응용 프로그램이 실제 작업을 수행할 환경을 만들었습니다.
배포판 설치 도구, 패키지 저장소, 기본 설정, 업데이트와 지원 정책 여러 구성 요소를 목적별 운영체제로 통합해 배포했습니다.

이 세 층은 서로 밀접하지만 같은 것은 아닙니다. 예를 들어 커널 보안 수정은 여러 배포판에 공통으로 영향을 줄 수 있지만, 패키지 버전과 지원 기간은 배포판마다 다를 수 있습니다. Android 역시 Linux 커널을 사용하지만 일반적인 데스크톱 GNU/Linux 배포판과는 사용자 공간과 응용 프로그램 구조가 다릅니다.

Linux가 오래 성장할 수 있었던 이유

  • 공개된 소스 코드: 누구나 코드를 검토하고 문제를 고치거나 새 하드웨어 지원을 제안할 수 있습니다.
  • 명확한 라이선스: GNU GPL은 수정과 재배포의 조건을 제시해 공동 개발의 법적 기반이 됐습니다.
  • 인터넷 기반 협업: 메일링 리스트, 담당 관리자와 공개 검토 절차가 지역과 조직을 넘는 개발을 가능하게 했습니다.
  • 배포판 생태계: 서로 다른 목적에 맞춘 설치 도구, 패키지, 업데이트 정책과 기술 지원이 제공됩니다.
  • 폭넓은 이식성: 개인용 컴퓨터에서 서버, 스마트폰과 임베디드 장비까지 다양한 하드웨어에서 사용할 수 있습니다.

리눅스 역사가 보여 주는 것

리눅스의 성장은 뛰어난 커널 하나만의 성공으로 설명하기 어렵습니다. UNIX 계열의 검증된 설계, GNU 도구와 자유 소프트웨어 운동, 배포판의 통합 작업, 기업의 투자와 전 세계 개발자의 공개 협업이 서로 맞물렸기 때문에 오랫동안 확장될 수 있었습니다.

따라서 리눅스 역사의 핵심은 “1991년에 누가 무엇을 만들었는가”를 넘어섭니다. 공개된 기술을 공동체가 검토하고 개선하며 서로 다른 목적에 맞게 재구성할 수 있다는 개발 방식이 실제 세계의 핵심 인프라로 성장한 과정이라고 이해하는 것이 가장 정확합니다.

자주 묻는 질문

리눅스는 누가 만들었나요?

Linux 커널은 리누스 토르발스가 1991년 시작했습니다. 이후 전 세계 개인 개발자와 기업이 코드를 기여하면서 대규모 공동 개발 프로젝트로 발전했습니다.

리눅스와 UNIX는 같은 운영체제인가요?

같지 않습니다. Linux는 UNIX의 설계와 사용 방식을 따르는 유닉스 계열 커널이지만 독립적으로 개발됐습니다. UNIX는 역사적인 운영체제 계열이자 인증 상표의 의미도 갖습니다.

Linux와 GNU/Linux는 무엇이 다른가요?

Linux는 엄밀히 커널을 뜻합니다. GNU/Linux는 Linux 커널과 GNU 도구가 결합된 전체 운영체제 구성을 강조하는 이름입니다. 일상적인 표현에서는 배포판과 전체 시스템도 흔히 리눅스라고 부릅니다.

배포판은 왜 필요한가요?

커널만으로는 일반 사용자가 완전한 컴퓨터 환경을 이용하기 어렵습니다. 배포판은 설치 프로그램, 시스템 도구, 패키지 관리자, 업데이트 정책과 응용 프로그램을 묶어 목적에 맞는 운영체제로 제공합니다.

오픈소스인 Linux를 기업이 판매해도 되나요?

가능합니다. 자유 소프트웨어의 ‘자유’는 반드시 무료 가격을 뜻하지 않습니다. 기업은 소프트웨어 배포, 장기 업데이트, 보안 인증, 기술 지원과 운영 도구를 묶어 유료로 제공할 수 있습니다. 다만 Linux 커널 코드를 수정해 배포할 때는 GNU GPL이 요구하는 소스 제공 등 해당 라이선스 조건을 따라야 합니다.

Linux는 한 회사가 소유하나요?

Linux 커널 개발을 단독으로 소유하고 통제하는 회사는 없습니다. 리누스 토르발스가 메인라인을 관리하고 분야별 담당자가 변경 사항을 통합하지만, 코드 저작권은 수많은 기여자에게 분산돼 있습니다. Linux Foundation은 개발 환경과 생태계를 지원하지만 커널 전체를 회사 제품처럼 소유하는 조직은 아닙니다.

참고 자료

같은 카테고리의 다른 글
Linux / 명령어 / history - 명령어 실행 기록 확인

Linux / 명령어 / history - 명령어 실행 기록 확인

Bash history 명령어로 이전 명령을 조회·검색·재실행·삭제하는 방법을 설명합니다. ~/.bash_history, HISTCONTROL, HISTTIMEFORMAT, histappend와 여러 터미널 기록 동기화 방법도 함께 정리합니다.

Linux / 명령어 / cat - 파일 내용 출력과 결합

Linux / 명령어 / cat - 파일 내용 출력과 결합

Linux cat 명령어로 텍스트 파일을 출력하고 여러 파일을 이어 붙이는 방법을 설명합니다. 줄 번호 표시, 빈 줄 압축, 리디렉션과 큰 파일 처리 시 주의점도 정리합니다.

Linux / 명령어 / comm - 정렬된 두 파일의 공통·고유 행 비교

Linux / 명령어 / comm - 정렬된 두 파일의 공통·고유 행 비교

Linux comm 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux 강좌 / 프로세스 확인·일시정지·종료하기

Linux 강좌 / 프로세스 확인·일시정지·종료하기

ps, top, pgrep으로 프로세스의 상태와 자원 사용량을 확인합니다. 실습 프로세스에 STOP, CONT, TERM을 보내고 셸 작업과 서비스의 차이를 익힙니다.

Linux / 명령어 / nmap - 허가된 호스트의 포트와 서비스 조사

Linux / 명령어 / nmap - 허가된 호스트의 포트와 서비스 조사

Linux nmap 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / tee - 파이프 출력을 화면과 파일에 동시 저장

Linux / 명령어 / tee - 파이프 출력을 화면과 파일에 동시 저장

Linux tee 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux apt-get 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / wc - 줄·단어·문자 수 계산

Linux / 명령어 / wc - 줄·단어·문자 수 계산

Linux wc 명령어로 줄·단어·바이트·문자 수를 확인하는 방법을 설명합니다. 개행 기준의 줄 수, -c와 -m 차이, 여러 파일 합계와 안전한 파이프 활용 예제를 정리합니다.

Linux / 명령어 / printenv - 환경 변수 값 출력

Linux / 명령어 / printenv - 환경 변수 값 출력

Linux printenv 명령어로 전체 또는 특정 환경 변수 값을 확인하는 방법을 설명합니다. 셸 변수와 환경 변수의 차이, 종료 상태, NUL 구분 출력과 env와의 차이를 정리합니다.

Linux / 명령어 / chgrp - 파일 소유 그룹 변경

Linux / 명령어 / chgrp - 파일 소유 그룹 변경

Linux chgrp 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.