Linux 강좌 / 리눅스란 무엇인가? 커널, 배포판, 오픈 소스 이해하기

리눅스는 엄밀히 말하면 컴퓨터의 하드웨어와 프로그램 사이에서 자원을 관리하는 커널(kernel)입니다. 우리가 설치해서 사용하는 ‘리눅스 운영체제’는 이 커널에 명령어, 라이브러리, 설치·업데이트 도구 등을 더한 배포판(distribution)입니다. 이 차이를 이해하면 Ubuntu와 Rocky Linux가 왜 둘 다 리눅스이면서도 사용 방법에는 차이가 있는지 알 수 있습니다.

리눅스는 커널인가요, 운영체제인가요?

두 표현 모두 쓰이지만 가리키는 범위가 다릅니다. Linux 커널은 운영체제의 핵심 프로그램이고, 일상적으로 말하는 리눅스 운영체제는 커널을 포함해 실제로 사용할 수 있도록 구성한 전체 시스템을 뜻합니다. 따라서 “Linux 커널을 업데이트한다”와 “리눅스를 설치한다”는 같은 일을 말하지 않습니다.

커널은 실행 중인 프로그램에 CPU 시간과 메모리를 배분하고, 파일 시스템·네트워크·장치 드라이버를 통해 하드웨어를 다룹니다. 프로그램은 저장장치를 직접 제어하는 대신 커널이 제공하는 인터페이스를 이용합니다. Linux 커널 공식 문서도 커널 자체와 사용자 공간 프로그램이 사용하는 인터페이스를 구분해 설명합니다.

반면 파일을 복사하는 명령어, 웹 브라우저, 웹 서버, 그래픽 화면은 커널 그 자체가 아닙니다. 이런 프로그램과 라이브러리는 사용자 공간(user space)에서 동작하며, 필요할 때 커널의 기능을 이용합니다. 많은 리눅스 배포판에 GNU 프로젝트의 도구가 포함되지만, 모든 사용자 공간 프로그램이 GNU 소프트웨어인 것은 아닙니다. GNU와 Linux의 관계는 GNU 프로젝트의 설명에서 자세히 볼 수 있습니다.

리눅스 시스템은 어떤 부분으로 이루어지나요?

처음에는 아래처럼 세 층으로 생각하면 편리합니다. 이는 개념을 이해하기 위한 단순화이며, 실제 시스템에는 부팅 과정과 다양한 중간 구성 요소도 있습니다.

  1. 하드웨어: CPU, 메모리, 저장장치, 네트워크 장치 등 실제 부품입니다.
  2. Linux 커널: 하드웨어 자원을 관리하고 프로그램이 사용할 공통 기능을 제공합니다.
  3. 사용자 공간: 셸, 명령어, 시스템 서비스, 라이브러리, 그래픽 환경과 응용 프로그램이 동작하는 영역입니다.

예를 들어 터미널에서 파일 내용을 읽는 명령어를 실행하면, 명령어 프로그램은 사용자 공간에서 실행되고 파일을 여는 작업은 커널의 기능을 거칩니다. 같은 커널을 사용하더라도 사용자 공간에 어떤 프로그램을 넣느냐에 따라 서버용 시스템과 데스크톱 시스템의 모습이 달라질 수 있습니다.

배포판은 무엇을 더하나요?

리눅스 배포판은 Linux 커널과 여러 소프트웨어를 선택·조합하고, 설치·설정·업데이트할 수 있도록 제공하는 운영체제입니다. 배포판에는 보통 패키지 관리 도구와 소프트웨어 저장소, 기본 시스템 서비스, 보안 업데이트 정책, 문서가 포함됩니다. Debian 프로젝트의 소개도 배포판을 커널만이 아닌 완성된 운영체제로 설명합니다.

Ubuntu와 Rocky Linux를 예로 들면 둘 다 Linux 커널을 기반으로 하지만 패키지 형식, 소프트웨어 관리 도구, 기본 설정과 지원 정책이 다릅니다. 따라서 명령어를 배울 때는 ‘Linux 커널의 기능’인지, ‘대부분의 배포판에서 쓰는 도구’인지, ‘특정 배포판에서만 쓰는 방법’인지를 구분해야 합니다. 어느 배포판을 선택할지는 강좌 02에서 다루므로, 여기서는 커널이 같아도 전체 사용 환경은 같지 않다는 점을 기억하면 충분합니다.

오픈 소스라는 말은 무엇을 뜻하나요?

오픈 소스(open source)는 단순히 소스 코드를 볼 수 있다는 뜻에 그치지 않습니다. 라이선스가 정한 조건 아래 코드를 사용하고, 수정하고, 재배포할 수 있어야 합니다. Open Source Initiative의 오픈 소스 정의에는 소스 코드 제공뿐 아니라 재배포와 파생 저작물 허용 등의 조건이 포함됩니다.

오픈 소스와 ‘비용 없이 제공한다’는 말도 구분해야 합니다. 소프트웨어를 무료로 받을 수 있어도 수정·재배포 권한이 없다면 그것만으로 오픈 소스는 아닙니다. 반대로 오픈 소스 소프트웨어를 유료로 배포하거나 기술 지원 서비스를 판매할 수도 있습니다. 또한 배포판에 들어 있는 모든 구성 요소가 반드시 동일한 라이선스를 쓰거나 모두 오픈 소스인 것은 아니므로, 특정 프로그램의 사용·수정·배포 조건은 해당 라이선스로 확인해야 합니다.

지금 사용하는 시스템에서 무엇을 확인할 수 있나요?

리눅스가 설치된 컴퓨터나 가상 머신이 있다면 다음 명령어로 실행 중인 커널 버전을 확인할 수 있습니다.

uname -r

배포판 이름과 버전은 보통 다음 파일에서 확인합니다.

cat /etc/os-release

출력에서 PRETTY_NAME은 사람이 읽기 쉬운 배포판 이름, ID와 VERSION_ID는 배포판 식별 정보입니다. uname -r의 결과와 배포판 버전은 서로 다른 대상의 버전이므로 숫자가 일치할 필요가 없습니다. 일부 최소화된 환경이나 특수 시스템에는 /etc/os-release가 없거나 표시 내용이 다를 수 있습니다.

핵심 개념 정리

  • 커널: 하드웨어 자원을 관리하고 프로그램에 공통 기능을 제공하는 운영체제의 핵심입니다.
  • 사용자 공간: 셸, 명령어, 서비스와 응용 프로그램이 실행되는 영역입니다.
  • 배포판: Linux 커널과 여러 소프트웨어를 묶어 설치하고 관리할 수 있게 만든 전체 시스템입니다.
  • 오픈 소스: 라이선스에 따라 소스 코드의 사용·수정·재배포가 허용되는 개발·배포 방식입니다.

리눅스가 어떻게 시작되고 발전했는지가 궁금하다면 리눅스 역사: 1991년 취미 프로젝트가 세계 인프라가 되기까지에서 연대기와 주요 전환점을 확인할 수 있습니다. 이 글은 역사보다 오늘날 리눅스 시스템의 구성과 용어를 이해하는 데 초점을 맞췄습니다.

같은 카테고리의 다른 글
Linux / 명령어 / ethtool - 네트워크 링크·드라이버 정보 확인

Linux / 명령어 / ethtool - 네트워크 링크·드라이버 정보 확인

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

Linux / 명령어 / xz - 파일을 xz 형식으로 압축하기

Linux / 명령어 / xz - 파일을 xz 형식으로 압축하기

Linux xz 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / column - 텍스트를 읽기 좋은 표 형태로 정렬

Linux / 명령어 / column - 텍스트를 읽기 좋은 표 형태로 정렬

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

Linux / 명령어 / mkdir - 디렉터리 생성

Linux / 명령어 / mkdir - 디렉터리 생성

Linux mkdir 명령어로 디렉터리와 여러 단계의 상위 디렉터리를 만드는 방법을 설명합니다. 권한, umask, SELinux 환경과 자동화에서 안전하게 사용하는 방법도 정리합니다.

Linux / 명령어 / top - 프로세스 자원 사용량 실시간 확인

Linux / 명령어 / top - 프로세스 자원 사용량 실시간 확인

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

Linux / 명령어 / printf - 지정한 형식으로 값 출력

Linux / 명령어 / printf - 지정한 형식으로 값 출력

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

Linux / 명령어 / diff - 텍스트 파일과 디렉터리 차이 비교

Linux / 명령어 / diff - 텍스트 파일과 디렉터리 차이 비교

Linux diff 명령어로 텍스트 파일과 디렉터리의 차이를 비교하는 방법을 설명합니다. unified 형식, 재귀 비교, 공백 무시와 종료 상태를 정리합니다.

Linux / 명령어 / dirname - 경로에서 디렉터리 부분 추출

Linux / 명령어 / dirname - 경로에서 디렉터리 부분 추출

Linux dirname 명령어로 경로의 디렉터리 부분을 추출하는 방법을 설명합니다. 입력 형태별 결과와 basename, realpath의 차이 및 셸 스크립트 활용법을 정리합니다.

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux unzip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux / 명령어 / env - 환경 변수 설정과 명령 실행

Linux env 명령어로 환경 변수를 추가·제거하거나 깨끗한 환경에서 프로그램을 실행하는 방법을 설명합니다. env -i·-u·-C, shebang 활용과 printenv와의 차이를 다룹니다.