Unix
Unix는 커널, 쉘, 유틸리티 등으로 구성된 운영체제입니다. Unix는 파일, 프로세스, 권한, 시스템 콜과 같은 운영체제의 기본 개념을 정립했고, 이후 여러 운영체제에 큰 영향을 주었습니다.
Components of Unix

Kernel : 운영체제의 핵심이며, 하드웨어와 소프트웨어 사이에서 동작을 관리합니다. 프로세스 실행, 메모리 관리, 파일 시스템 관리 등의 작업을 담당합니다.
Utility : 파일 관리, 텍스트 처리, 프로세스 확인 등 자주 사용하는 작업을 수행하는 기본 프로그램입니다. 예를 들어,
ls는 파일 목록을 관리하고,cp는 파일을 복사하며,grep은 텍스트에서 특정 문자열을 검색합니다.Shell : 사용자가 운영체제와 상호작용할 수 있도록 제공되는 명령어 해석기입니다. 사용자가 터미널에 입력한 명령어를 해석하고, 해당 작업을 운영체제에 요청합니다. 대표적인 셸로는
sh,bash,zsh등이 있습니다.System Call : 사용자 프로그램이 커널의 기능을 사용할 수 있도록 제공되는 인터페이스입니다. 프로그램이 파일을 열거나 데이터를 읽고 쓰려면 시스템 콜을 통해 커널에 작업을 요청해야합니다.
Unix는 사용자 영역과 커널 영역으로 나누어 동작합니다. Shell, Utility, Application은 사용자의 영역에서 실행되며, 하드웨어 자원에 직접 접근해야 하는 작업은 시스템 콜을 통해 커널에 요청합니다. 즉, 사용자는 쉘이나 유틸리티를 통해 명령을 실행하고, 프로그램은 시스템 콜을 통해 커널에 필요한 작업을 요청하며, 커널은 하드웨어 자원을 관리하고 요청을 처리합니다.
Linux = Unix?
Unix는 커널, 쉘, 유틸리티 등을 포함한 운영체제입니다. 반면 Linux는 엄밀히 말하면 운영체제 전체가 아니라 커널을 의미합니다. Unix 소스 코드를 기반으로 만든 것이 아니라 Unix와 유사한 구조와 사용 방식을 목표로 독립적으로 개발된 커널입니다. Unix 계열 운영체제와 Linux 기반 운영체제는 모두 커널을 중심으로 셸과 유틸리티가 사용자 프로그램을 제공하고, 시스템 콜을 통해 커널의 기능을 사용한다는 공통된 구조를 가집니다. 이처럼 Unix와 유사한 구조와 동작 방식을 따르기 때문에 Linux 기반 운영체제를 Unix-like라고 부릅니다.
따라서, Linux의 커널만으로 일반 사용자가 바로 사용할 수 있는 완성된 운영체제 환경이 되지 않습니다. Linux 커널에 쉘, 기본 유틸리티, 패키지 관리자 등을 묶어 사용하기 쉬운 형태로 제공하는 것을 Linux 배포판이라고 합니다. 같은 Linux 커널을 사용하더라도 배포판마다 기본 설정, 패키지 관리 방식, 제공하는 프로그램, 지원 대상이 다를 수 있습니다. 대표적인 리눅스의 배포판으로는 Ubuntu, RedHat, Debian 등이 있습니다.
Why did they develop the Linux kernel?
Linux 커널은 개인용 PC에서도 자유롭게 사용할 수 있는 Unix-like 환경을 만들기 위해 개발되었습니다. 당시 Unix 계열 운영체제는 주로 대학과 기업 환경에서 사용되었고, 사용과 수정에 제약이 있는 경우가 많았습니다. 리누스 토르발즈는 이러한 환경에서 벗어나 동작하는 커널을 만들기 위해 Linux를 개발하기 시작했습니다.
MacOS = Linux? Unix?
결론부터 말하자면, MacOS는 Unix 계열 운영체제입니다. macOS는 Mach 기반 기술과 BSD 계열 기능을 결합한 XNU 커널을 사용합니다. 또한 XNU 커널 위에 BSD 계열의 사용자 공간 도구와 셸 환경을 제공하기 때문에, 터미널에서 ls, cd, grep과 같은 Unix 계열 명령어를 사용할 수 있습니다.
참고: BSD는 초기 Unix에서 발전한 Unix 계열 운영체제입니다. 대표적인 BSD 계열 운영체제로는 FreeBSD, OpenBSD 등이 있습니다.
How Can We run Docker on Mac?
Linux에서는 컨테이너가 호스트의 Linux 커널을 그대로 공유하므로 별도의 VM이 필요 없습니다. 반면 macOS는 XNU 커널을 사용하므로, Linux 컨테이너를 실행하려면 Linux 커널이 필요합니다. 그래서 Docker Desktop은 경량 Linux VM을 띄우고, 그 안에서 Docker Engine과 컨테이너를 실행합니다. 여러 컨테이너가 각각 VM을 만드는 것은 아니며, 일반적으로 하나의 Linux VM 안에서 커널을 공유합니다.
따라서 메모리, CPU, 디스크 이미지, macOS와 Linux VM 사이의 파일 공유·네트워크 처리 비용이 추가됩니다. 컨테이너가 많거나 파일 마운트가 잦은 개발 환경에서는 이 부담이 더 체감될 수 있습니다. 그래서 이를 대체하기 위해 OrbStack, Apple Container 같은 대안도 존재합니다. OrbStack은 가상 머신을 없애는 것이 아니라, 하나의 경량 Linux VM을 더 효율적으로 구성해 자원 사용량과 파일 공유 성능을 개선하는 방식입니다. 반면 Apple Container는 컨테이너마다 작은 Linux VM을 생성해 더 강한 격리를 제공합니다.
How Does Windows Run Linux?
macOS와 마찬가지로 Windows도 기본적으로 Linux 커널을 사용하지 않기 때문에, Linux 환경을 실행하기 위한 별도의 방식이 필요합니다. Microsoft는 이를 위해 WSL(Windows Subsystem for Linux)을 제공하며, Windows 환경에서 Linux 배포판과 명령어를 사용할 수 있도록 지원합니다. 다만 WSL1과 WSL2는 Linux 프로그램의 요청을 처리하는 방식과 Linux 커널 사용 여부에서 차이가 있습니다.
WSL1 vs WSL2
WSL1은 Linux 커널을 사용하지않습니다. WSL2와 달리 Linux 커널을 실행하기 위한 VM도 사용하지않습니다. WSL1에서 Linux 프로그램이 시스템 콜을 통해 파일을 읽거나 프로세스를 실행하는 등의 작업을 요청하면, WSL 계층이 해당 요청을 Windows NT 커널이 처리할 수 있는 방식으로 변환합니다. Windows NT 커널은 변환된 요청을 처리하고, 그 결과를 다시 Linux 프로그램이 이해할 수 있는 형태로 전달합니다.

반면, WSL2는 Hyper-V 기반의 가상화 기술을 사용해 경량 가상 머신 내부에서 실제 Linux 커널을 실행합니다. 그림에서처럼 Windows NT 커널은 호스트 운영체제에서 실행되고, Linux 커널은 별도의 경량 가상 머신 안에서 실행됩니다. WSL2에서 Linux 프로그램이 시스템 콜을 호출하면, WSL1처럼 해당 요청을 Windows NT 커널이 처리할 수 있는 형태로 변환하지 않습니다. 대신 가상 머신 내부의 실제 Linux 커널이 시스템 콜을 직접 처리하고, 처리 결과를 Linux 프로그램에 반환합니다.
즉, WSL1이 Linux 시스템 콜을 Windows 환경에 맞게 변환해 처리하는 방식이라면, WSL2는 실제 Linux 커널이 시스템 콜을 직접 처리하는 가상화 기반 구조입니다.