문서의 을 확인하세요.
운영 체제 | ||||||
{{{#!wiki style="word-break: keep-all; margin: -16px -11px" | UNIX | Linux | Windows | |||
DOS | ||||||
기타 | RTOS · Fuchsia · | }}} | ||||
취소선 처리된 배포판은 개발 중단된 배포판. |
{{{#!wiki style="margin: -10px -10px;" | <tablebordercolor=#ffdf33> | Linux 배포판 |
<colbgcolor=#ffdf33><colcolor=#000> Linux 리눅스 | |
| |
개발 | 리누스 토르발스 외 |
플랫폼 | AMD64, IA-32, ARM, MIPS, PowerPC, SPARC(64bit), RISC-V 등 |
개발 언어 | C언어, 어셈블리어 및 기타 언어 |
홈페이지 | [1] | [2] |
1. 개요2. 역사3. 다양한 배포판4. 다양한 플랫폼5. GNU/Linux vs Linux 명칭 논쟁6. 라이선스7. 보안8. 커널9. GUI 환경10. 주요 용도11. 시장 점유율12. 특징
12.1. 배포자의 다양화12.2. 애플리케이션 설치/관리 방법
13. 배포판14. 명령어15. macOS와의 차이16. 지원 소프트웨어12.2.1. 의존성 관리
12.3. 상용 프로그램12.4. 명령어 및 텍스트 사용환경12.5. 다국어 지원12.6. 디바이스 드라이버 지원12.7. 설정법16.1. 네이티브 소프트웨어16.2. Windows 대체 소프트웨어 일람
17. 관련 문서[clearfix]
1. 개요
컴퓨터 운영체제 커널의 일종인 Linux 커널, 또는 Linux 커널을 사용하는 운영체제를 가리키는 말이기도 하다.
컴퓨터 역사상 가장 많은 참여자가 관여하고 있으며, 소스 코드가 공개되어 있는 대표적인 오픈 소스 프로젝트다. Linux 재단에 따르면 퍼블릭 클라우드 컴퓨팅 워크로드의 90%, 스마트폰의 82%, 임베디드 기기의 62%, 슈퍼 컴퓨터 시장의 99%가 Linux로 작동한다.[3] 모바일 운영체제로 유명한 Android 역시 Linux 커널을 가져다 쓰고 있다. GNU 프로젝트가 주도한 시스템 소프트웨어 및 라이브러리로 이루어진 Linux 배포판을 GNU/Linux라 부르기도 한다.
Linux라는 이름은 Linus' *nix, 리누스의 Unix라는 뜻으로 지어졌다. *nix는 Unix 계열 운영체제라는 뜻이다. 리눅스를 개발한 리누스 토르발스가 직접 Linus' Minix가 Linux가 되었다고 언급했다. 나중에 Linux Is Not UniX라는 재귀약자를 새로 만들어냈다.
2007년부터 2019년 사이의 Linux 커널 참여자 중 회사순위를 보면 1위 Intel (10.01%), 2위 Red Hat (8.90%), 3위 IBM (3.79%), 4위 SUSE (3.49%), 5위 Linaro (3.17%), 6위 Google (2.79%), 7위 삼성전자 (2.58%), 8위 AMD (2.28%), 9위 르네사스 (1.99%), 10위 Texas Instruments (1.78%), 11위 Oracle (1.70%), 12위 Broadcom (1.23%), 13위 Huawei (1.2%), 14위 Mellanox (1.19%), 15위 NXP (1.18%), 16위 ARM (0.98%), 17위 Linux 재단 (0.78%) 등으로 모두 반도체/통신/IT/시스템 업체임을 알 수 있다.[4]
2. 역사
2.1. 초기
1991년 당시 핀란드 헬싱키 공대 대학생이었던 리누스 토르발스가 Minix를 사용하는 컴퓨터에서 작업해서 만들었다. 참고 기사 Minix를 쓰면서 마음에 안 드는 점이 있을 때마다 커널에 여러 가지 기능을 추가했고, 어느새 운영체제에 가까울 정도로 기능이 늘어났다.리누스는 이 커널을 처음 릴리스 할 때, 무료이니 'Free', 매니아이니 'Freak', 그리고 UNIX와 유사하니 'x'를 조합해 'Freax'라고 부르길 원했다고 한다. 그러나 FTP 서버에 소스 파일을 업로드해줬던 아리 렘케는 차라리 리누스가 개발했으니 'Linux'라고 부르는 게 낫겠다 싶어 리누스의 허락 없이(...) 이름을 'Linux'로 바꿨고, 리누스도 이 이름이 마음에 들어 새 운영체제의 이름은 Linux로 확정됐다.
2.2. 성장
Linux는 거의 공개 직후부터 가히 폭발적인 성장세를 보인다. 여러 가지 원인들이 겹친 결과였다. UNIX의 일종인 BSD가 소송에 휘말리면서 대체품에 대한 관심이 커진 것도 큰 역할을 했다. 극성 BSD 빠들 중에서는 그 소송만 없었다면 Linux는 존재하지도 않았을 거라고 주장하는 사람도 있을 정도였다. 또한 Linux 커널 소스 코드에 GPL을 선택하고, 현재 오픈 소스 개발 모델의 모체가 된, 소스 코드 공개와 공개적 개발 모델을 선택한 것도 유효했다. 이전에는 오픈 소스 소프트웨어라도 핵심 개발자 집단이 개발 과정을 독점하고, 릴리스할 준비가 되었다고 판단될 때에야 소스를 공개하는 방식을 사용했다. 그런데 Linux는 누구나 소스를 읽은 후 패치를 작성해 보낼 수 있도록 했다. 패치가 받아들여지면 그 패치를 보낸 사람은 기여자가 되어 다음 릴리스 노트에 이름이 적혔다. 에릭 레이먼드의 표현을 빌리자면 이는 사람들의 과시욕을 충족시키는 방식이었고, 사람들은 돈을 받지 않고도 커널의 버그 수정과 기능 추가에 매달렸다.초기 Linux는 기능이 불완전한 운영체제였다. 그러나 자체 커널[5] 개발에 난항을 겪고 있던 GNU 프로젝트가 Linux 커널에 관심을 가졌고, Linux 커널과 GNU 유틸리티가 결합하면서 비교적 완전한 운영체제로 거듭났다. 18개월여만인 1994년에는 Linux 커널 1.0 버전이 나왔다. 이후 썬 마이크로시스템즈나 IBM 등의 대기업들이 Linux 개발을 지원하기 시작하는 등, Linux가 IT 세계에서 가지는 입지는 빠르게 탄탄해졌다.
2.3. 현재
데스크톱/랩톱 용도뿐만 아니라 웹 서버, 클라우드 컴퓨팅, 모바일 기기, 임베디드 기기 등 여러 분야에서 폭넓게 사용되고 있다.반도체 회사 및 Red Hat 등 Linux 운영체제 배포자들이 주로 Linux 커널에 참여하고 있다. 모바일 시장에서 Linux 커널을 쓰는 Android의 위상이야 더 말할 필요가 없을 정도이다.
Windows에서는 WSL(Windows Subsystem for Linux)을 포함시켜 Linux 환경을 지원하고 있다.[6] Linux에서도 Wine 등을 통해 Windows용 소프트웨어의 실행을 지원하고 있다.
3. 다양한 배포판
OS의 핵심 기반이 Linux 커널이고 이를 사용하는 수많은 배포판들이 있다.모든 소스가 공개되어 있다 보니 같은 역할을 하는 프로그램이라도 편리성을 지향하는 프로그램, 속도를 지향하는 프로그램, 확장성을 지향하는 프로그램, 가벼움을 지향하는 프로그램 등 여러 선택지가 존재하기 때문. 쉽게 이야기 하면 '종자'(감자 혹은 오렌지)와 '종자 개량' 그리고 그 '종자'를 이용해 재배한 작물을 활용한 '완제품'(감자칩 혹은 오렌지음료류)을 생각하면 쉽다.
운영체제 하나를 구성하는 데에도 핵심부 커널부터 해서 그 상위 미들웨어를 거쳐 사용자가 접하는 인터페이스에 이르기까지 수십~수백 가지의 프로그램이 들어가고 그걸 엔드유저가 직접 하나하나 신경쓸 순 없기 때문에[7] 배포자의 기준으로 하나의 세트(배포판)를 만들어 내고 사용자에게 배포된다.
Linux에 입문하는 엔드 유저는 배포판(벤더)들이 다양하다고 걱정할 필요가 없고 Ubuntu나 Fedora, Debian, Manjaro Linux 등의 사용자 친화적 배포판을 사용하면 된다. USB나 SSD로 여러 배포판의 Linux를 설치없이 테스트 해볼 수 있는 장점도 있다.
거기에다 공개되어 있는 커널 소스와 기타 오픈소스 프로그램들을 마음대로 가져다 자신만의 Linux 배포판을 만들어 브랜딩이 가능하다. 그래서 모든 Linux 배포판의 개수를 집계한다는 것은 불가능하나, 어느 정도 공개적으로 배포되거나 인지도가 있는 배포판을 연대표(타임라인)식으로 2012년에 공개한 GNU/Linux 배포 타임라인에 따르면 약 450여개의 배포판이 있다고 전해 진다. 관련 정보를 알고 싶다면 Linux 배포판 랭킹사이트인 디스트로워치을 참조하면 된다.
Linux 커널 자체도 변형판이 있다. 각 배포판 제작 팀에서 자기 입맛에 맞춰 약간 씩의 수정을 가하기도 하고, 공식 Linux에는 포함되지 않은 패치를 집어넣어서 직접 컴파일 할 수도 있다.
프로그래머를 위한 플랫폼이기도 하다. Linux와 CLI 환경 자체가 간단한 프로그래밍 언어를 이용해서 처리할 수 있는 수많은 과제들을 제공해주는 소스다. GUI 상에서 해결할 수 있는 문제를 CLI 셸을 통해서 명령을 내리거나, 셸 스크립트 혹은 다른 프로그래밍 언어를 이용해 작성한 스크립트를 실행하여 처리할 수 있다. GUI 프로그램을 하나 만들려면 사용될 프로그램 언어와 UX를 위한 비주얼 빌더 사용법 및 GUI 라이브러리 사용법까지 배워야 하지만, CLI 환경에서는 프로그래밍 언어 만으로 커맨드 라인 프로그램이나 백엔드 프로그램을 작성하는 것이 가능하다. CLI 명령 중 하나인 wc나 cat, cp 등 간단한 명령어들은 초심자도 금방 배울 수 있고 소스 코드도 공개되어 있으므로 자신만의 개량형 버전을 만들어 사용할 수도 있다. 몇몇 프로그램은 아예 소스 코드 자체를 세팅 파일로 활용한다.[8] 게임 분야에서도 CLI 환경이 훨씬 만들기 쉽기 때문에 로그라이크 게임들이 많이 돌아다닌다. 디아블로와 리니지에 지대한 영향을 준 넷핵이 이쪽에서 유명 게임 중 하나다. Linux에 입문하는 노래도 있다. #
4. 다양한 플랫폼
기본적인 사양을 충족시키는 대부분의 플랫폼에 Linux를 설치할 수 있다. 다만 플랫폼에 의존적인 부분이 있어 각 Linux 배포판과의 호환성이 있어야 한다. PC뿐만 아니라 스마트폰, 게이밍 콘솔을 비롯하여 인터넷 공유기, 냉장고, 텔레비전, 드론 등 각종 임베디드 시스템에서도 Linux가 폭넓게 사용된다. Linux 커널을 사용하는 Android도 Xorg 대신 Surfaceflinger을 사용하고 ART(Android Runtime) 등의 Android Framework 계층이 추가된 Linux 기반 운영 체제이다. (U)HDTV와 DVR의 대표기기인 Tivo도 Linux로 동작한다. 이와 비슷하게 호환성을 미덕으로 삼는 NetBSD도 있다.[9]CPU 핫플러그인도 지원한다. 코어를 켜고 끄는 건 바이오스에서 설정해야 하는 것이 일반적이다. 그것을 운영체제가 작동할 때 설정할 수 있다는 소리다. 실제로 이 기능은 ARM big.LITTLE의 핵심 기능으로 사용되고 있다.
위와 같은 Linux로 동작되는 전용 포터블 콘솔 게임기 말고도 닌텐도 게임기, 드림캐스트, 게임큐브, Xbox, PlayStation 등의 게임기에서 Linux를 구동할 수 있는 경우가 있다. 다만 Linux 하드웨어 요구 사양이 과거에 비해는 다소 올라가서 Wii와 같은 7세대 이전의 게임기에서는 Linux 버전이나 앱에서 어느정도 타협을 봐야 한다. 또한 최신 게임기에서는 부트로더 등의 보안이 철저해짐에 따라 이전만큼 쉽게 설치하기는 어려워졌다.
PlayStation 2에서 공식적으로 Linux를 지원한 적이 있었다. 이를 위해서 네트워크 카드, 40GB HDD, VGA 케이블, 키보드, 마우스, 메모리카드와 더불어 Linux 인스톨 키트를 세트로 해서 판매하였다. 다만 Linux를 설치한 상태에서는 게임 구동이 불가능하였으며, 다시 게임을 돌리기 위해서는 Linux를 지우고 PS2 기본 펌웨어로 변경해야 했다. 나중에 나온 슬림모델에서는 HDD를 설치할 수가 없으므로, Linux 설치가 불가능해졌다.
또한 PlayStation 3에서도 공식적으로 Linux 설치가 가능했다.[10] Yellow Dog Linux라는 배포판이 있는데 이는 Fedora에서 파생되어 나온 물건이다. 다만 PS3에서 데스크톱용 Linux처럼 쓰려면 PS2와 마찬가지로 싹 밀고 다시 깔아줘야 하는데 가끔씩 이 짓을 정말로 저지르는 용자들이 꽤 있다. 다만, PS3 초기형에서만 가능하며, 2010년 펌웨어 버전 3.21이 넘어가면서 Linux 지원을 중단하였다. 한때 미 공군 연구소에서 영상분석용으로 1,760대의 PS3를 병렬로 연결하여 슈퍼컴퓨터를 구성한 적이 있는데, 이때 Linux가 사용되었다.[11]
구형 Xbox도 CPU로 펜티엄 3를 사용하고 주요 하드웨어 구성이 PC랑 별 차이 없기 때문에 비교적 쉽게 Linux를 설치할 수 있다. 약간의 꼼수만 쓰면 모드칩 같은 것을 사용하지 않아도 가능하다. 이렇게 Linux를 설치하여 미디어 플레이어로 쓰거나 서버로 돌리는 사람도 있다. XBMC라는 강력한 미디어 플랫폼이 이 Xbox를 미디어 센터로 사용하려는데서 출발한 것이다. 요즘은 스틱 PC에 Linux가 설치되어 있기 때문에 구형 Xbox를 대신하여 홈미디어 플레이어로 활용이 되고 있다.
1990년대 후반에 출시된 구형 게임기인 닌텐도 64에서 2020년 당시 최신 버전인 리눅스 커널 5.10을 구동하는 데 성공한 사례가 있다.[12]
5. GNU/Linux vs Linux 명칭 논쟁
'Linux'가 아니라 'GNU/Linux'라고 불러야 한다는 주장도 있다. GNU 프로젝트와 자유 소프트웨어 운동을 창시한 리처드 스톨먼은 'GNU/Linux'라고 부르지 않는 기자들과는 대화도 하지 않는다고 한다.GNU/FSF 쪽 지지자들은 ①리누스 토르발스가 만든 Linux 커널은 전체 운영체제의 핵심이지만 일부에 불과하고, ②리눅스 커널 자체만으로는 OS로써 동작하지 않으며, ③OS를 구성하는 주요 컴포넌트 중 상당수가 GNU 프로젝트에서 만든 것이기에, ④이를 이용해 만든 전체 OS는 "GNU 시스템의 일종"이라고 주장한다. 따라서 자신들의 기여를 고려하면 "GNU/Linux" 또는 "GNU 플러스 Linux"가 맞는 명칭이라는 것이다. 대부분의 Linux 시스템에서 사용되는 GNU 컴포넌트 중 몇 개만 예를 들자면,
- GNU Core Utilities (통칭 coreutils): UNIX 명령행 유틸리티들. `cp`, `rm`, `mv`, `cat` 등 필수적인 명령어들이 여기에 포함되어 있다. 유닉스의 POSIX 규격을 완성시키는 중요한 컴포넌트 중 하나이다.
- GNU Compiler Collections (통칭 GCC): C를 비롯한 각종 언어의 컴파일러.
- GNU C Library (통칭 glibc): C언어용 라이브러리.
- GNU GRUB: BIOS와 EFI 시스템을 위한 부트로더.
하지만 리누스 본인은 GNU/Linux라 부르는 걸 이상하다 생각하고 Linux라 부르는 걸 선호한다. 'Linux'라는 상표를 가지고 있는 원 제작자가 좋아하지 않는 행위이다 보니, 이 쪽 관련으로 본인의 자서전에서 리처드 스톨먼을 언급하기도 한다. Linux 자체는 GNU 프로젝트가 아닌데도 불구하고 FSF가 Linux를 GNU/Linux라고 하는 등 마치 GNU 프로젝트인 것처럼 포장 하는 행위를 별로 좋아하지 않는다.[13] 특히 Android는 제일 많이 보급된 Linux 운영체제으로 볼 수 있는데, GNU의 프로젝트는 여기에 포함되지 않는다.
Alpine Linux나 안드로이드처럼 GNU 컴포넌트를 사용하지 않고도 충분히 전체 OS를 구성할 수 있다며, "Linux"라는 명칭을 지지하는 사람들도 있다. 예를 들어 coreutils는 BusyBox로, GCC는 LLVM/Clang으로, glibc는 Bionic이나 musl libc로, GRUB은 syslinux나 u-boot로 대체할 수 있다. 또 전체 OS를 구성하는 컴포넌트에는 GNU와 커널을 제외하고도, 데스크톱 환경에서 필수불가결한 요소인 freedesktop.org 소속의 프로젝트들(X11, Wayland, Mesa3D 등), Red Hat과 같은 기업들도 참여하고 있는 서비스 매니저인 systemd 등 여러 가지가 있다. 위 프로젝트들은 Linux라는 명칭에 자신들의 프로젝트를 같이 불러달라고 요구하고 있지 않는데, 왜 GNU만 특별취급해서 이름에 넣어야 하냐는 주장이다.
다만 위 명칭 논쟁은 GNU 컴포넌트와 리눅스 커널을 함께 사용하고 있는 경우에 관한 것이다. 한 운영체제의 각 모듈은 호환성을 가지는 다른 모듈로 교체할 수 있으며, GNU 컴포넌트를 전부 교체한다면 그 운영체제는 더이상 GNU/Linux가 아니다. GNU 프로젝트 역시 개발 단계에서는 유닉스의 컴포넌트를 하나씩 GNU로 갈아끼워가며 최초 버전을 완성시켰다.
아울러 존중의 차원에서 GNU/Linux와 같은 명칭을 주장하는 것이지 법적인 강제성이 있는 것은 아니다. 즉 개인에 따라 GNU 재단의 의사를 존중한다면 GNU/Linux라고 부르면 되고, 굳이 그렇게 하고 싶지 않다면 GNU를 생략해도 된다.
간혹 인터넷에서 Linux 배포판을 뭉뚱그려 Linux라는 표현을 쓰면 GNU/Linux의 유효성을 주장하며 FSF를 대변하고 단어를 "교정"하려는 장문의 글을 써내려 가는 사람들도 볼 수 있다. FSF에는 리누스 토르발스도 직접 언급하였듯이 뭔가 극단성을 가진 사람들의 비중이 높기 때문에[14], 이 논쟁에 말려들어가면 밑도 끝도 없이 길어지는 토론을 볼 수 있게 된다. 이런 논쟁이 격해지다 보면, "커널이 운영체제의 '일부'에 지나지 않는다면 왜 GNU는 Hurd[15]에서 그 '일부'를 30년째 못 완성하고 있냐"라는 주장이나, "GNU 프로젝트의 지원이 없었으면 Linux는 그냥 리누스의 취미활동으로 끝났을 것"이라는 극단주의자들도 종종 볼 수 있다.
한편 데스크톱/서버 Linux를 Android와 구분하여 표현할 때 GNU/Linux라고 하기도 한다. Android는 Linux 커널을 쓰긴 하지만 그것 말고는 공통점이 적기 때문이다.
6. 라이선스
Linux 커널 소스 코드는 GPL v2가 적용되며 라이선스 버전은 고정 되어있다. 이유는 '개조된 GPL 소프트웨어가 실행되지 못하도록 막는 DRM' 행태를 못하도록 하는 GPLv3의 조항을 리누스 토르발스가 반대했기 때문이다.(Tivo DVR등 임베디드 시스템에 Linux가 사용되고 있던 이유이다.)대부분의 오픈 소스 Linux 소프트웨어 공급자들이 오픈 소스 소프트웨어 라이선스를 적용하고 있는데다 Linux 커널이 GPL로 배포되고 있기 때문에 Linux 상에서 동작하는 모든 소프트웨어도 GPL이여야 한다라는 주장을 하는 경우가 있는데 이는 사실이 아니다.
Linux에서 GPL은 커널 소프트웨어에 한정되어 있고, 유저랜드에서 동작하는 소프트웨어가 Linux 커널의 API를 Syscall을 통해 사용하는 것은 GPL의 파생 저작물(derivative work)에 해당하지 아니함을 명시화 한바 있으며 이에 따라 커널 스페이스(Ring-0) 에서 동작하는 코드가 아닌 이상유저랜드 (Ring-1+)에서 동작하는 프로그램들도 Linux 커널과 통신하는 비공개 상용 소프트웨어를 제작/배포하는 것이 가능하며 실제로도 Linux용 클로즈드 소스의 상용 소프트웨어들도 존재한다.
대부분의 Linux 벤더는 각자의 커뮤니티 쪽에서 서포트를 관리하고 있지만 소프트웨어는 무료로 제공하면서 기술 지원 서비스 등을 선택사항으로 하는 비즈니스 모델을 취하고 있는 경우도 있다. 상업용 서버나 기타 비즈니스용 소프트웨어를 사용하다가 어떠한 문제가 발생했을 때, 보통 기업에서는 비용을 지불하고 전문 기술 지원을 받는 것을 선호하는 경향이 있기 때문이다. 예를 들면 Ubuntu를 배포하는 Canonical은 기술 지원 계약을 통해 수익을 얻고 있으며 Red Hat의 경우 Red Hat Enterprise Linux라는 이름으로 솔루션 및 기업 서포트까지 제공하는 유료 프로그램을 판매하고 있다.
유료 기술지원을 받는 것은 선택사항이다. 예시로 Red Hat Enterprise Linux 패키지 구성에서 상표권 등을 리브랜딩 하고 기술 지원 옵션 없이 RHEL 소스 코드를 참고하여 재배포하는 Rocky Linux, AlmaLinux 등이 있다.
한편 Linux라는 이름의 상표권은 리누스 토르발스 개인이 소유하고 있다. 1995년 미국의 한 변호사가 Linux라는 상표를 출원한 뒤 리눅스 관련 기업들에게 이용료를 뜯어내려고 했던 사건이 있었는데, 이에 토르발스가 여러 리눅스 관련 단체/기업들과 함께 소송을 제기하여 상표권을 되찾았기 때문이다. 토르발스는 현재 리눅스 재단에 상표 관리를 위탁하여, 신청을 통해 Linux라는 상표에 대한 사용권을 무료로 제공하고 있다.
마스코트인 펭귄 턱스는 래리 유윙(Larry Ewing)[16]이 만든 것으로, 그의 이름과 GIMP를 사용해 그렸다는 사실만 명시하면 자유롭게 사용할 수 있다.
7. 보안
Linux 배포자가 분산되어 있고 악성코드가 주로 Windows를 타겟으로 하기 때문에 상대적으로 멀웨어로부터 자유로운 편이다.하지만 다른 운영체제와 마찬가지로 보안 업데이트를 하지 않거나, 루트 사용자 관리를 잘못하면 보안 관련한 문제가 생길 수 있다. 유명 배포판인 Linux Mint의 홈페이지가 해킹 당해서 조작된 ISO 파일이 등록되는 사건도 있었다.[17][18] 그러므로 Linux 배포판 ISO를 다운받고 해시값까지 확인하는 것이 좋다.[19] 루트(슈퍼 유저) 퍼미션, 보안 키/인증서가 있는 저장소 사용, 백신으로 스캔, 방화벽(GuFw, Firewalld), 백업 유틸 등을 사용하여 예방할 수 있다.
Wine을 사용하는 경우에도 무조건 방심하면 안된다. 워너크라이의 경우 시스템 파일은 건들지 못했지만 Wine과 연결된 home 폴더는 암호화시킨 전력이 있다. 따라서 AppArmor처럼 프로그램의 파일 접근 권한을 직접 제한하거나 Bottles와 같이 Wine 환경을 샌드박스로 만드는 파생 프로그램 등을 사용하여 예방해야 한다.
8. 커널
자세한 내용은 Linux/커널 문서 참고하십시오.9. GUI 환경
Linux / UNIX GUI 환경 | |||
{{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="border: 0px solid; margin: -11px; margin-top: -8px; margin-bottom: -6px;" | 윈도우 시스템 | X11 · Wayland · Mir · SurfaceFlinger · Quartz | |
윈도우 매니저 | Compositing, Stacking | Mutter · MATE/Marco · Muffin · KWin · Openbox · xfwm · twm | |
Tiling | xmonad · Bspwm · i3 | ||
Dynamic | Awesome · dwm | ||
디스플레이 매니저 | GDM · SDDM(KDM) · LightDM · LXDM | ||
데스크톱 환경 | GTK | GNOME · MATE · Cinnamon · Budgie · Unity · Xfce · LXDE · Pantheon · Phosh | |
Qt | KDE(Plasma Mobile) · LXQt · Deepin · JDE · UKUI |
Windows와 macOS의 경우 GUI 환경이 시스템에 고정으로 포함되어 있으며 분리할 수 없다.[20] 반면 Linux에서는 커널과 GUI 환경이 분리되어 GUI 환경이 별도로 관리되고 있어 필요에 따라 선택하여 사용할 수 있다.
9.1. 구성 요소
Linux의 GUI 환경을 구성하는 요소로 디스플레이 서버, 디스플레이 매니저, Windows 매니저, 데스크톱 환경 등이 있다.Linux GUI 구성 요소 |
- 커널: 하드웨어와의 통신을 담당한다.
- 디스플레이 서버[21]: 클라이언트와의 입출력을 담당하며 화면을 표시하는 기초적인 부분이다. (X11, Wayland 등)
- 윈도우 매니저: 커널과 창, 그리고 창과 창 사이의 통신을 관리한다.
- 디스플레이 매니저: 디스플레이 서버와 데스크톱 환경을 시동시키고 사용자 로그인을 관리한다. 쉽게 생각해서 로그인 화면. (GDM, SDDM, LightDM 등) 사용자가 디스플레이 서버나 데스크톱 환경을 선택할 수 있도록 옵션을 제공한다.
- UI/UX 툴킷: 유저 인터페이스 UI를 구성하기 위해 사용되는 프로그래밍 툴이다. 일반적으로 GUI 응용 프로그램을 만들 때 이를 사용한다.
- 데스크톱 환경: 사용자가 위와 같은 기술적인 내용을 몰라도 사용할 수 있게끔 세트로 묶고 일관된 경험을 제공한다. 일반적으로 운영체제를 설치하고 볼 수 있는 것들이 바로 데스크톱 환경이다.
9.2. 데스크톱 환경
데스크톱 환경은 일관된 사용자 경험을 제공하는 인터페이스 스타일이다. 대부분의 사용자는 여러 데스크톱 환경 중 하나를 선택해서 사용한다. 자세한 내용은 데스크톱 환경 문서 참고.9.3. UI / UX 툴킷
프로그램을 디자인하면서 유저 인터페이스 UI를 구성하기 위해 사용하는 프로그래밍 툴로, SDK 또는 GUI 프로그래밍 라이브러리 라고도 한다. Linux를 공식 지원하는 대표적인 UI/UX 툴킷으로는 GTK[22], Flutter, Uno Platform, wxWidgets, Qt[23] 등이 있다. 각 툴킷별로 UI를 그래픽 툴처럼 작성할 수 있는 별도의 비주얼 빌더도 있다. 상식적인 것이지만, UI/UX 비주얼 빌더 소프트웨어 소스 코드가 GPL이라고 해서 거기서 추출된 XML 등의 코드가 GPL을 따를 필요는 없다. UI/UX 툴킷 GUI 프로그래밍 라이브러리가 LGPL, MIT, Apache, BSD 등 소스 코드 공개 의무가 없는 라이선스를 적용한 경우, 작성한 프로그램의 소스 코드 공개/배포도 불필요하다.특정 툴킷으로 디자인된 프로그램이 작동하기 위해서는 앱 패키지 설치시 관련된 라이브러리가 설치되고 의존성으로 딸려오는 패키지도 있다. 이들이 프로그램의 실행과 함께 로딩되어야 한다. 테마를 커스텀도 가능하고 원하는 테마를 선택할 수 있으며, UI/UX 테마 패키지 또한 풍부하다. 하나의 Linux 벤더나 하나의 DE에서는 제공되는 프로그램들을 하나의 툴킷으로 통일하여 제공하거나 프로그램마다 개별 툴킷 사용 및 개별 테마도 적용할 수 있다.
10. 주요 용도
10.1. 데스크톱 및 노트북
웹서버 관리나 프로그래밍 용도로는 Linux만큼 좋은 OS가 없다. 대부분의 어플리케이션들은 클릭 몇 번만 하면 설치 가능하다.멀티미디어 기기 역시 Linux용 드라이버를 제공하고 있으며 무선 랜카드 등 대부분의 디바이스 드라이버도 각 반도체사에서 Linux 커널에 직접 참여하여 커널 자체에 포함시키고 있어 별도 드라이버 설치 없이도 사용할 수 있다.
오피스 스위트의 경우, Microsoft Office 대신 LibreOffice를 사용하면 된다. 기관에서 MS Office 문서가 사용되고 있으나 LibreOffice에서 MS Office 파일을 오픈-편집-저장을 지원하고 있다. 혹은 mac OS를 사용할 때처럼 프로그램이 아닌 웹 버전을 사용해도 된다.
동영상 편집도 가능한데, Kdenlive와 ShotCut은 오픈소스 프로그램인데도 전문적인 기능을 제공한다.
대체 프로그램이 없을 경우 Linux에서 Windows 프로그램을 직접 실행하게 해주는 Wine이나 KVM/QEMU로 가상머신을 사용할 수 있다.
게임 회사 밸브에서는 Linux를 게임 플랫폼으로 만들기 위해 많은 노력을 하고 있다. NVIDIA와 협력해서 Linux 기반의 게임 특화 운영체제 SteamOS를 만들기도 했고 다른 배포판에서도 Steam을 이용하여 최신 게임을 플레이할 수 있다.
10.2. 서버 용도
홈서버든 상업용 서버든 점유율이 Windows보다 높다. 서버 쪽에서 Linux의 위상은 엄청나다. 무료인 데다가, 오픈 소스고, Linux에 익숙한 인력도 많고, 안정성도 높은 편이니 서버 운영체제로서는 최적인 셈이다. 서버용 프로그램들 대부분이 Linux를 지원하거나, Linux 상에서 개발되고 있다. 요즘에는 Windows Server도 성능이 어느 정도 높아져서 점유율이 약간 늘었지만 클로즈드 소스에다 가격도 비싸고 서버 시장에서 비주류인지라 여전히 Linux에 비할 바는 되지 못한다.서버쪽 성능이나 안정성 등은 Linux가 뛰어나다는 평가를 자주 받는다. G-WAN이라는 웹서버 소프트웨어는 원래 Windows 서버용으로 개발중이었는데, Windows와 Linux에서 네트워크 성능테스트를 해본 결과 Windows에서의 성능이 처참할 정도로 밀렸다. 벤치마크 그 결과 개발 중이던 Windows 버전을 그냥 버리고 Linux 쪽으로 옮긴 상태다. 흔히 Linux의 강점을 공짜라고 생각하는데, 서버 쪽에서는 무로로 사용가능한 Ubuntu나 Rocky Linux도 많이 사용하지만 값비싼 RHEL 같은 유료 Linux도 많이 사용한다. 서버 쪽에서 Linux를 많이 쓰는 건 단순히 공짜라서로 치부할 일이 아닌 그만한 이유가 있는 것.
GUI가 없는 환경은 가벼워서 서버 성능에도 도움이 되고 보안에도 도움이 된다. Linux는 GUI를 선택적[24]으로 사용할 수 있지만 Windows는 서버 버전이 아닌 이상 GUI 부분을 삭제하는 것 자체가 불가능하다. 서버 관리와 같은 전문적인 환경에서 CLI는 GUI보다 효율이 뛰어나다.
그래서 예전에 소스 엔진 게임들의 멀티플레이 로비에서도 호스팅해주는 게임 서버(데디케이티드 서버)들의 운영체제는 반이 Linux였다. 이외에는 FreeBSD 정도가 많이 쓰이는 정도지만, Linux 만큼 점유율이 높지는 않다.
구글은 원래 Ubuntu 기반의 구분투(Goobuntu)라는 자체 운영 체제를 썼으나 Debian 기반의 gLinux로 바꿨다.[25] 구글은 웹 서버도 구글 웹 서버라는 자체 소프트웨어를 사용한다.
10.3. 모바일 용도
Android는 Linux 커널에 기반하고 있지만 GUI, 어플리케이션 레이어 등 구글이 따로 넣은 요소가 많다. Ubuntu Touch도 Android 만큼은 아니지만 마찬가지로 기존 Linux 기술 스택과 다른 부분이 많다.Android에서도 Termux와 같은 터미널을 사용하면 Android 위에 데스크톱용 GNU/Linux를 설치할 수 있다. 이를 이용하면 Linux GUI 환경도 제한적으로 돌릴 수 있지만 제약이 많아 대체로 터미널로만 사용한다.[26]
Android와는 별개로 기존 Linux 배포판을 모바일에서도 사용하기 위한 시도들이 진행되고 있다. Linux는 커널과 데스크톱 환경이 분리되어 있어 데스크톱 환경만 모바일용으로 적절히 만들면 기존 데스크톱 앱이 그대로 호환되는 스마트폰/태블릿을 만들 수 있다. 대표적으로는 KaiOS, postmarketOS, Phosh, JingOS 등등이 있다.
10.4. 임베디드 기기 용도
CCTV, TV, 게임기나 노래방 기계같은 멀티미디어 기기부터 라우터나 휴대전화 같은 통신기기, 키오스크나 ATM 같은 무인 서비스 기기, 스마트홈, 로봇, 자동차 인포테인먼트 등 각종 통신이나 멀티미디어, 사물인터넷용/산업용 임베디드 기기에 Linux가 사용되는 경우가 많다.10.5. 게임 용도
Linux에서의 게임 플레이 방법은 다양하다. Linux를 공식적으로 지원하는 게임의 수 또한 늘고 있다.첫 번째로, 스팀 게임들이다. 기획단계에서 스팀이 Linux를 공식 지원하게 되었고, 그에 따라서 밸브 자체의 게임은 물론이고 스팀을 플랫폼으로 하는 게임들 중 Linux로 만들어지는 게임이 대폭적으로 늘었다. 현재 약 9천 개[27] 이상의 최신 게임을 즐길 수 있다. (카운터-스트라이크를 한물 지난 컴퓨터에서 OpenGL로 돌려보자.) 사실, Linux 플랫폼 지원 강화는 Windows 마켓이 클로즈드 방식으로 변했기 때문이다. 밸브는 Windows를 비난하는 언급을 했으며, Linux 플랫폼을 일종의 보험 용도로 인식하여 지원을 강화한다고 발표하였다.[28]
두 번째로, Wine이 생각보다 최근 성능이 좋아지면서 이를 통해 플레이 할 수 있는 게임이 많아졌다. WineHQ AppDB를 참고하여 호환되는 게임들의 종류를 확인할 수 있다. 특히 2019년 들어서 DXVK(DirectX 11 이하)와 VKD3D(DirectX 12)의 성능이 상당히 발전했기 때문에 사양만 받쳐준다면 다이렉트 X 전용 게임도 무리없이 돌릴 수 있다. 벨브는 Wine의 파생 버전으로 게임 호환성에 중점을 둔 Proton을 개발하고 있다. 밸브가 자사의 핸드헬드 게이밍 PC인 Steam Deck으로 인해 Proton의 호환성에 많은 투자를 하고 있는데다, 게임사들도 Steam Deck 때문에 Proton과의 호환성에 신경쓰기 시작했기에 앞으로 Linux 스팀 게임의 호환성의 미래는 밝다고 볼 수 있다.
다만 멀티플레이 게임같은 경우에는 사정이 좀 다른 편인데, 발로란트, 배틀그라운드, 레인보우 식스 시즈와 같은 안티 치트 프로그램을 사용하는 게임들의 경우 정상 작동하지 않을 수 있다. 이러한 Wine과 Proton으로도 실행이 불가능한 Windows용 게임의 경우에는 KVM/QEMU 가상머신을 통해 Windows 환경에서 실행할 수 있지만, 안티 치트가 가상 머신을 탐지하여 계정이 정지당하거나 실행이 불가능할 수 있다는 한계가 있다. 최근에는 리그 오브 레전드, Apex 레전드등의 게임들이 리눅스 자체가 주요 핵 사용 경로로 지목되어 아예 Linux와 호환이 되지 않는 EA 안티 치트, 라이엇 뱅가드등의 안티 치트를 도입하거나 Linux 지원을 종료하는 등, 멀티플레이 게임을 지원하기 위해 아직 개선해야 할 사항이 많은 편이다.
세 번째로, OpenGL 계열 게임들은 네이티브로 포팅될 때 DirectX 기반보다는 Linux에서 사용할 수 있게 될 확률이 높다. 존 카맥 재직 시절의 이드 소프트웨어에서 출시한 PC 게임은 거의 다 Linux를 지원한다. DirectX를 사용하지 않고 OpenGL을 사용하기 때문이다. 철지난 게임들[29]의 바이너리 파일을 Linux용으로 공개하였다.[30] Braid나 World of Goo 등의 몇몇 인디 게임들도 Linux용 풀패키지를 팔고 있다. 그리고 자유 소프트웨어로 웬만한 상용 버전 보다 더 빵빵한 웨스노스 전쟁도 있다.
네 번째로 인터프리터나 에뮬레이터를 거치는 게임은 대부분 Linux에서도 지원한다. 마인크래프트 자바 에디션와 같은 경우에도 Java 기반이기 때문에 문제 없이 실행이 가능하며, Windows보다 성능이 더 잘 나오기도 한다. 게임 에뮬레이터 목록
콘솔 게임기나 아케이드 게임기에도 들어가는 경우가 있으며, Steam Deck 등에 Linux 커널이 쓰이고 있다. 참고로, Xbox는 커스텀된 Windows를 사용하고 있고 PlayStation는 FreeBSD에 기반하고 있다.
10.6. VFX
해외의 경우 렌더팜[31]은 물론 작업 컴퓨터도 Linux로 되어 있는 경우가 많다. 주로 CentOS나 RHEL인데, 이는 Windows보다 렌더팜 구성 등에 용이한 이유도 있지만, 실리콘 그래픽스의 워크스테이션을 쓰며 성장한 8,90년대의 VFX업계가 2000년대에 들어서 SGI를 손절해버리고 Linux로 갈아탄 역사가 있기 때문이다. 이러면서 IRIX[32]에서 돌아가던 소프트웨어들도 그대로 Linux로 포팅하게 된다. 상용 프로그램들은 물론이고, 인하우스 프로그램들과 파이프라인에서 사용하는 스크립트들도 IRIX용으로 작성된 것인데 이를 Windows로 옮기는 것은 비용이 매우 크니까[33] 가격이 더 저렴하고 IRIX와도 비슷한 Linux로 옮겨간 것이다. 물론 후술하겠지만 Windows나 macOS을 쓰지 않는다는 것은 아니다. 아예 주력으로 쓰는 회사들도 있지만 대부분의 경우 파이프라인의 일부일 것이다.이렇게 업계와 함께 프로그램들이 Unix, 그리고 Linux로 성장해왔고 딱히 Windows로 옮길 이유는 없었기에 대부분의 프로그램들은 Linux를 지원하고 있다. 다만 일반적으로 회사 내부에서는 Linux를 쓰지만 집에서는 프리랜서나 학생, 개인들은 개인컴으로 여러 가지를 겸해야 하기 때문에 Windows를 쓰는 경우도 있다.
유명한 Blender, Maya, Nuke, Katana, XSI, Clarisse, Mari, Fusion, Arnold, Renderman 등은 모두 Linux를 지원한다. 특히 렌더러들은 렌더팜에서 돌아가는 것이 전제임으로 모두 지원하고 있다. 다만, ZBrush나 Cinema 4D등의 Linux 미지원 프로그램들도 있다.[34] 이런 경우는 아예 게임쪽 업계에서 사용하기 시작한 프로그램이거나, 여러 사정으로 Windows나 macOS용으로 시작했으나 이미 성장한 상태에서 포팅하기는 비용이 큰 경우도 있다. 이런 경우는 해당 프로그램이 지원하는 OS를 설치한 컴퓨터를 따로 쓰거나, 아예 가상머신에서 돌리기도 한다.
10.7. 저사양 컴퓨터
오래되거나 저사양이라서 윈도우를 구동하기 버겁거나 윈도우 보안 업데이트 지원이 끊긴 노트북 및 데스크탑을 살리기 위해 가볍고 리소스를 적게 잡아먹는 Linux를 까는 경우도 종종 있다. 컴퓨터로 인터넷 브라우저만 사용하는 사람들도 있기에 나름 메리트가 있는 편이다.11. 시장 점유율
웹서버, 클라우드 서버 시장에서 압도적인 점유율을 보이고 있다. 웹서버만 보고 단순히 전세계 100만 개 도메인을 조사해 보면 96.5%가 Linux 서버라고 하기도 하고[35], 알렉사 기준 많이 쓰는 도메인을 기준으로 보면 82%가 Linux라고 한다.[36] 인터넷 서비스 용도로는 Windows Server나 UNIX 계열 서버는 보기가 어려울 정도로 Linux 서버가 대세가 되어 있다.모바일에서도 실질적으로 Linux가 장악하고 있다고 할 수 있다. Android가 Linux 커널을 사용하기 때문이다.
클라이언트 장치의 웹사이트 방문 수에 기반한 웹 서버 통계에 따르면 데스크톱 시장에서는 Windows에 비해 Linux가 여전히 부진한 편이다. 자세한 내용은 운영체제/점유율 문서를 참조.
카-인포테인먼트 시장에서 강세였던 MS의 임베디드 Windows 역시 2010년 중후반부터 Linux에 따라 잡힌 상태이다.
슈퍼컴퓨터 OS의 경우 사실상 Linux가 100%를 차지한다. top500 참조.
스페인 바르셀로나에서는 모든 소프트웨어를 Ubuntu 등 오픈 소스 소프트웨어로 바꾸기로 결정하였다. Windows가 없는 도시를 꿈꾼다 : 스페인 바르셀로나의 오픈소스 전면화 프로젝트 (2018-01-31)
12. 특징
12.1. 배포자의 다양화
크로스 플랫폼 앱 디자인 개발 툴의 발달에 의해 Linux를 지원하는 프로그램들이 점점 더 많아지고 있다. Windows 전용 개발 환경 등 특정 플랫폼 만을 고집했던 소프트웨어 개발사들은 새로운 패러다임에서 경쟁력을 갖추기 어려워 지고 있다. Linux에서 불리했던 게임도 스팀이 Linux를 지원하기 시작하면서 해결되고 있다. 디바이스 드라이버나 소프트웨어 문제도 해결되었고 성능 및 보안 등 Linux 플랫폼 자체가 가진 특징도 있다.Linux는 벤더가 달라도 공통된 커널과 데스크톱 환경을 취사 선택가능하다. Android의 경우 SW 파편화를 Android Oreo부터 Android Treble을 적용해 해결하려 하고 있다.
Linux 커널 버전, 데스크톱 환경 DE (GNOME, KDE, Xfce, LXDE 등, 데스크톱 환경을 변경하기 위한 별도 DE 패키지로 추가 변경도 가능), Terminal/CLI/콘솔 (Bash 등등), 배포자 별로 제공되고 있는 디바이스 드라이버 버전 차이 확인 등등을 기준으로 Linux 벤더를 선정 설치후 최적화 시키면 된다.
높은 자유도와 수많은 배포자들간의 경쟁이 있는 것이 특징인 운영 체제인만큼 이는 계속 발전될 수밖에 없으며, 서버/임베디드 시장에서는 Linux가 역으로 장점이고 데스크톱/랩톱 시장에서도 2010년 중후반부터 사용자가 늘고 있다. Windows 환경에서 가능한 모든 기능에 상응한 Linux용 앱/커맨드/스크립트들이 Linux에 있다.
12.1.1. 데스크톱 환경
데스크톱 환경의 기반인 UX툴킷(SDK)들의 표준화 문제나 같은 툴킷 벤더 버전 별로도 사용법이 변경 되어 왔으나 2010년 중반부터 안정화 되어 가고 있다. 참고로, 과거 UX 툴킷의 급변과 라이브러리 사용법의 불안정화는 Windows가 Linux 보다 더 심했다.어플리케이션 클라이언트와 Display Server 사이의 통신 프로토콜에는 기존방식의 X11과 새로운 Wayland가 있다. 메이저 Linux 데스크톱 환경에서는 독자 개발한 Wayland 컴포지터가 사용되는데 GNOME은 Mutter, KDE는 Kwin을 사용한다. 또한 Wayland 개발진이 만든 레퍼런스 컴포지터인 Weston, 이외의 GUI 환경에서 많이 사용되는 wlroots 등이 있다.
각 Linux 배포판의 디폴트 데스크톱 환경 하에서 GNOME, KDE, Xfce, LXDE 기반의 또다른 데스크톱 페키지를 선택하여 설치/변경도 가능하다. 데스크톱 용으로도 롤링 릴리즈라 오피스 등의 일상 프로그램을 깔아두고 매일 업데이트하며 쓰기 좋다. 극한의 커스텀을 위해서는 Arch Linux나 Gentoo Linux를 추천하는데, 젠투는 CLI에서 직접 컴파일하여 설치하는 방식이라 어렵고 시간이 소모되지만, 익숙해지면 괜찮다.
12.1.2. 커맨드 셸
CLI라고 그런게 아주 없지는 않다. 패키지 관리자야 배포판마다 각자의 철학이 있으니 그렇다 치더라도, 2016년 기준, 최근 몇 년 사이에 인터넷 설정과 시스템 초기화에 사용되던 대세 프로그램이 각각 ifconfig에서 ip로, 그리고 SysV init 혹은 OpenRC에서 systemd로 변경된 예가 있다. 이 두 예시 모두 좀 더 나은 성능과 더 깊이 있는 레벨의 설정을 고려하여 만들어진 것이다.셸 스크립트를 실행하고 CLI 환경을 관리하는 Linux 셸마저도, Bash가 사실상의 표준이기는 하지만 Debian 계열은 실상 Bash가 아닌 Dash를 사용하여 미묘한 부분에서 호환성 문제가 발생하는 데다가 일부 배포판에서는 zsh이나 다른 셸을 기본 셸로 지정하는 등의 예가 있다. 이것 또한 기본적으로 셸이 지켜야 할 부분 이외에는 어떤 확장을 추가하더라도 문제가 없기에 발생하는 일.[37]
그 외에도, 한 배포판 내에서도 같은 이름의 툴인데도 BSD판 툴과 GNU판 툴이 저장소에 공존하기도 하고, python이라는 명령어에 어떤 배포판은 python2를 매핑시켜놓고 어떤 배포판은 python3을 매핑시켜놓는 등 파고들수록 여러 가지 문제를 찾을 수 있다. 단, 이 python 관련 문제는 python2의 지원이 끝남에 따라 점차 해결되고 있다.
12.2. 애플리케이션 설치/관리 방법
Linux에서 애플리케이션을 설치하는 방법은 여러 가지가 있는데 크게 분류하여 다음과 같다.- 소스 코드를 받아서[38] 직접 컴파일 후 설치하는 방법. 가장 고전적인 방식이다.
- 시스템 패키지 매니저를 사용하여 패키지를 설치하는 방법. 흔히 보는 Debian 계열의
sudo apt install <프로그램명>
이 이것이다.- Flatpak, Snap와 같은 시스템에서 독립된 패키지 매니저를 사용하여 패키지를 설치하는 방법. 배포판의 의존성을 따르지 않고 자체적으로 의존성을 해결한다.
- AppImage 형태의 패키지를 설치 혹은 실행하는 방법.[39] 필요한 의존성을 모두 한 독립적인 패키지 파일에 담아 의존성을 해결한다.
- GUI 소프트웨어를 사용하여 패키지를 설치하는 방법. 앞서 언급한 패키지 매니저를 GUI를 통해 관리한다. PackageKit, GNOME Software, Discover 등이 있다.
패키지 매니저나 설치 파일 확장자는 배포판에 따라서 다르다. 예를 들어 apt 시스템 패키지 매니저와 및 *.deb 패키지 확장명은 Ubuntu 등 Debian 계열에서 주로 사용되며, dnf 시스템 패키지 매니저 및 *.rpm 패키지 확장명은 RHEL 등 페도라 계열에서 주로 사용된다.
Flatpak, Snap, AppImage는 최근 등장한 패키지 설치/관리 방법이다. 한 배포판에 종속되어 있지 않고 독립적이기 때문에 모든 배포판에서 사용 가능하며, 패키지 설치 시 루트 권한을 필요로 하지 않는다. 또한 자체적으로 의존성을 해결하기 때문에 후술할 의존성 문제로부터 자유롭다. Linux를 처음 접한 초보자에게 추천되는 이유이다.
12.2.1. 의존성 관리
Linux[40] 배포판에서 패키지들을 관리할 때에는 특히 의존성 문제를 신경써야 한다.전통적으로 Linux에서 프로그램을 설치하면 그 해당 프로그램만 딱 설치하며, 부속품 격인 '의존 패키지들[41]'은 별도로 설치해야 한다.[42] 그러다 보니 어떤 프로그램을 설치하려면 의존 패키지들까지 일일이 따로 구해서 설치하는 불편함이 존재했다. 이를 해결하기 위해 등장한 것이 시스템 패키지 매니저이다. 시스템 패키지 매니저의 출현은 이러한 의존성 문제를 대신 해결해주었다.
또한 Linux에서는 Windows나 macOS와 달리, 프로그램들이 서로 의존성을 공유한다. 이것은 저장공간 낭비를 줄인다는 장점은 있지만 서로 다른 의존성을 요구하는 프로그램들을 동시에 설치할 수 없거나, 프로그램 한번 업데이트했더니 다른 프로그램이 먹통이 된다거나 하는 치명적인 문제가 있다. 또한 각 배포판마다 다른 의존 패키지가 필요하여 각 배포판마다 설치 파일을 별도로 제작해야 하는 파편화도 발생시킨다. 따라서 대부분의 Linux 배포판들은 의존 패키지들을 해당 의존성을 필요로 하는 패키지 내에 명시하고, 의존성이 모두 맞춰진 프로그램 세트를 구할 수 있도록 각 배포판 버전마다 따로 저장소를 만들어 두어 각 프로그램마다 필요한 버전을 가리키도록 하는 것으로 문제를 해결한다.[43]
다만 이러한 의존성 처리 방식이 비효울적이라는 비판이 있었고, 그래서 최근에 등장한 것이 Flatpak, Snap, AppImage,
12.3. 상용 프로그램
Linux 서버 상에서 사용되는 프로그램들중 유료 프로그램들이 많다. Linux 엔터프라이즈용 프로그램들도 유료 프로그램들이 대다수다구글 Android의 수익은 구글 플레이를 통한 거래의 수수료에서 나오지만 Android 기술 자체는 엄연한 구글 소유다. 제조사는 Android 인증을 받기 위해선 구글로부터 직접 기기 인증 요청을 해야 하고 이 과정은 결코 '무료'가 아니다. 이는 오픈 소스 라이선스를 가진 프로그램들이 주로 취하는 유료 정책 중 하나이기도 하다. MySQL은 오픈소스 부분만 포함한 커뮤니티 버전은 무료이고 오라클에서 수정한 부분을 포함한 버전만 유료에 상용 라이선스다. 다만 오라클이 수정한 부분을 사용함으로써 얻는 이득은 미비하고 유료 버전을 구매하는 이유는 레드헷이 그러하듯 오라클로부터 직접 고객 지원을 받을 수 있기 때문이다. 여담으로 현재 대부분의 Linux 배포판은 MySQL 대신 커뮤니티 버전을 fork한 MariaDB로 대체했다. Java의 가장 널리 쓰이는 JVM인 HotSpotVM은 OpenJDK로 오픈 소스로 제공되지만 실상은 오라클이 소유한 엄연한 '상용 소프트웨어'이다. 즉 Java도 엄연한 상용 프로그램이다. Android의 달빅 가상머신이 이미 Java 기술 저작권 침해로 오라클과 소송을 진행한 적이 있었다. 구글이 오라클을 상대로 승소하기 했지만.[45] 다만 개발자들이 그렇게 느끼지 못할 뿐인데 이는 오라클에 합병되기 전 썬 마이크로시스템즈가 가진 Java 라이선스 정책에 의해 그렇게 느껴질 뿐이다.
구글이 사용하는, Chromium-Chrome이나 AOSP-Android처럼 오픈 소스 프로젝트를 후원하고 브랜딩만 붙여서 상용 소프트웨어로 만드는 효율적인 구조의 예도 있으나 일단 전제조건이 오픈 소스 프로젝트가 일단 성공해야 그 뒤의 커뮤니티 지원이 성공적으로 이루어진다는 점, 그리고 직접적인 수익은 기대할 수 없다는 점에서 구글이라서 가능한 전략이라고 봐야 할 것이다.
12.4. 명령어 및 텍스트 사용환경
터미널이라고 줄여 부르는 터미널 에뮬레이터(Terminal Emulator)는 사용자가 데이터를 입력 출력하는 프로그램이며 사용자는 터미널 에뮬레이터를 통해 응용 프로그램에 접근하는 구조로 되어있다. 즉 터미널은 종류에 따라 CLI 또는 텍스트 유저 인터페이스(TUI), 넓게 보면 GUI 환경을 쓸 수 있도록 하는 프로그램이다.bash와 cmd를 비교해 보자면, bash와 cmd는 모두 현재 프로그래밍 언어의 주류인 C-style에서 많이 벗어난 문법이므로 프로그래밍을 대충 끄적거려 본 사람에게도 둘 모두 익숙해지는데는 시간이 꽤 걸린다. 그런데 cmd는 문법 자체가 매우 비효율적이라[46] bash가 차라리 낫다. bash는 일단 쉽지 않다고는 해도 Linux의 수많은 셸 중에서 경쟁을 거쳐 가장 많이 사용되는 셸이니 어느 정도 검증돼 있다고 볼 수 있다. 만약 꼭 bash나 타 셸을 써야 할 필요가 없다면, 셸을 간단히만 배우고 파이썬을 셸 대신 사용하여 Linux를 활용하는 것도 가능하다. 문법이 직관적인 것은 물론이고 생산성도 더욱 높으며, 무엇보다 필요할 경우 파이썬 내에서 Linux 셸 스크립트도 실행시킬 수 있다.
하지만, 파이썬을 따로 설치해야 하고 한 줄 한 줄 명령어를 입력해야 하는 상황에서는 별로 적합하지 않다는 단점이 있다. 말 그대로 셸 스크립트를 짜야 할 만한 반복적이고 정교한 작업이 필요할 경우 파이썬이 셸 스크립트를 효율적으로 대체할 수 있다는 것일 뿐, 완벽하게 대체하지는 못한다.
전통적인 Unix 환경이 그러하듯이 원격 접속은 기본적으로 텔넷이나 SSH 등을 통해 CLI 환경으로 접속하는 것이다. 웹호스팅 등에서 서버에 접속하는 것도 바로 Linux의 SSH 원격접속이다. 텔넷은 PC통신 시절에 많이 쓰던 그것으로, 이 때문에 Linux 환경에서는 다른 프로그램 없이 바로 telnet 명령 입력하고 PC통신 연결 주소 입력하면 PC통신 화면이 바로 떴다. 애초에 PC통신 자체가 Linux의 원본(?)인 Unix의 터미널 환경을 사용하기 때문에 Linux에서도 그대로 되는 것. PC통신 프로그램은 이 터미널 환경을 도스나 Windows 환경에서도 쓸 수 있게 에뮬레이션 시켜주는 프로그램이다. 단, 텔넷은 암호화가 안 되기 때문에 보안성이 낮아서 요즘은 거의 안 쓰고, 암호화 통신을 하는 SSH를 많이 사용한다. 이처럼 서버 관리 부분에서는 CLI 환경으로 접속하는 것이 기본일 뿐더러, 대부분의 작업이 CLI로도 모두 가능하므로 GUI는 필요가 없는 경우가 많다. 그래서 서버 등 원격접속해서 쓰는 용도로 Linux를 설치한다면 아예 GUI 부분은 제외하고 설치하거나 설치 후 GUI 부분을 삭제하는 경우도 많다. 물론 Windows에서도 텔넷 등 CLI 환경으로의 원격접속을 지원하긴 하지만 어디까지나 기본은 GUI이기 때문에 CLI 모드에서 할 수 있는 작업은 제한되어 있다.
12.5. 다국어 지원
각 국가의 사용자들이 커뮤니티 차원에서 다국어 지원을 추가하고 있다. 로마자(라틴 문자) 사용 국가용은 다국어 지원이 잘되는 편이나 한글화는 약한 편이다. 리브레 오피스에서 한글 스펠링 체크 애드인도 있다. Linux의 상용판인 Red Hat이나 OpenSUSE 또한 부족한 로컬라이징을 보완해서 출시하고 있다.운영체제 레벨에서 한글이나 한자의 입출력 또한 가능하다.
12.6. 디바이스 드라이버 지원
Linux 각각의 벤더들이 반도체사에서 제공하고 있는 Linux용 디바이스 드라이버를 배포하고 있으며, Windows용 버전과 거의 동시에 출시되거나 조금 늦는 편이다.Intel, AMD의 오픈소스 그래픽 드라이버와 NVIDIA의 독점 그래픽 드라이버를 리버스 엔지니어링 해서 만든 오픈소스 드라이버인 Nouveau는 Linux 커널 단에서 지원하고 있다. 다만 다른 오픈소스 그래픽 드라이버와 달리 Nouveau 드라이버는 성능 문제가 존재한다. AMD나 NVIDIA의 독점 그래픽 드라이버의 경우 패키지 관리를 수월히 위해서는 홈페이지에서 직접 받아 설치하는 것보다 자신이 사용하는 Linux 배포판이 제공하는 것을 사용하는 것이 좋다.
PC 계열 이외의 임베디드 SoC 칩/보드에 대한 지원 양상을 보면 Windows보다 Linux 계열의 지원이 빠르면서도 충실한 경우가 많다. SoC 업체들이 Linux 커널을 자사의 SoC에 맞춰 포팅하는 작업을 하기 때문이다. 공급자가 제공한 Linux 배포판 혹은 커널을 사용하거나 커스텀 Linux 커널을 사용자가 작성하여 사용할 수 있다. 다만 포팅한 작업물을 메인 업스트림 Linux 커널 소스에 기여하지 않아 제조사가 제공하는 특정 버전의 Linux 커널만 지원하는 경우가 있다.
12.7. 설정법
새로운 기능이 도입되거나, 다른 프로그램과의 충돌을 피하거나, 사용자에게 더 많은 선택지를 주거나, 다른 프로그램과의 호환성을 높이거나, 편의성을 높이려고 하거나, 사용자별로 설정을 다르게 하거나 하는 등의 이유로 한 프로그램에 설정 파일이 여러 개가 있는 경우가 있다.Linux 상에서는 조합에 따라 다른 프로그램을 쓸 수도 있고 안 쓸수도 있기 때문에 신호나 출력이 거쳐가는 프로그램마다 각자 설정을 가지고 있는 경우가 많으며 대형 배포판에서는 여러 사용자의 요구를 커버하기 위해 여러 가지 프로그램을 모아 놓게 된다.
13. 배포판
자세한 내용은 Linux/배포판 문서 참고하십시오.14. 명령어
자세한 내용은 Linux/명령어 문서 참고하십시오.15. macOS와의 차이
macOS와 Linux의 공통점은 POSIX 규격을 따르는 Unix-like 운영체제라는 점이 있으나 macOS는 일부 컴포넌트를 제외하고 모두 폐쇄형 클로즈드 코드이다.macOS의 하부 시스템인 Darwin과 그 커널인 XNU는 미국 대학에서 만든 마이크로커널인 Mach 3.0과 4.4BSD-Lite2의 구성요소로 주로 FreeBSD와 약간의 NetBSD 가져와 Apple에서 조합해서 만든 하이브리드 커널 방식의 OS이다.
macOS는 상표적인 Unix 운영체제이고 POSIX C API, X11 GUI 애플리케이션 구동, Unix식 권한 체계와 유틸리티, 셸 등이 그러하다. macOS는 일부 데스크톱 어플 정도에서 쓰이고 있다.
macOS에 기본 포함된 Unix 유틸리티들은 BSD의 소스 코드에 기반하고 있다. macOS에서 기본적으로 창 관리자 내지 디스플레이 서버의 기능을 하는 것은 오래된 X11과 유사한 Quartz Compositor다. macOS에서 X11 응용프로그램을 구동하려면 Quartz 위에서 도는 X11 서버인 XQuartz를 따로 설치해야 하며 이렇게 구동한 X11 응용프로그램은 Cocoa API 프레임워크로 작성된 네이티브 macOS 앱과 이질적으로 표시된다.
16. 지원 소프트웨어
16.1. 네이티브 소프트웨어
자세한 내용은 Linux/소프트웨어 문서 참고하십시오.16.2. Windows 대체 소프트웨어 일람
- MS Office → LibreOffice, WPS Office
- Visual Studio → GNOME Builder, Glade[47], Android Studio[48], Eclipse, IntelliJ IDEA, Code::Blocks, NetBeans, CLion, KDevelop
- SourceTree → SmartGit, GitKraken, Guitar Git GUI
- 포토샵 → GIMP, Krita, Pinta 등
- 일러스트레이터 → Inkscape, Karbon14 등
- 라이트룸 → Darktable, LightZone, RawTherapee 등
- InDesign → LibreOffice Writer[49]
- 어도비 아크로뱃 → Okular, Evince, PDF Studio, 리브레오피스 Draw[50]
- 아웃룩 → Thunderbird, Evolution 등
- 메모장 → CherryTree[51], gedit, 그놈 텍스트 편집기, Kate, Leafpad, Mousepad, JEdit, Notepadqq 등
- 미디어 플레이어 → VLC, SMPlayer, MPlayer, 그놈 동영상(Totem), Kaffeine, mpv[52]
- 비디오 에디터 → Avidemux, Cinelerra, Kdenlive, Shotcut, DaVinci Resolve
- 카카오톡 → Discord, Skype, Mercury Messenger, Pidgin, Emesene, Empathy, KMess 등
- 파티션 매직 → GParted, KDE Partition Manager
- Hyper-V 가상머신 → KVM(Kernel-based VM)-QEMU[53]
- Windows 소프트웨어 직접 실행 → WINE, Bottles, CrossOver
17. 관련 문서
- 오픈 소스 소프트웨어
- POSIX: Unix의 API 표준이다.
- ALSA: Linux에서 오디오 입/출력 API를 제공하는 커널 모듈
- 오픈인터넷뱅킹
- 키보드 단축키
- Manual pages
- Flutter
- Wayland
- 턱스 (마스코트 펭귄)
- GNU GPL(General Public License)
- Linux/커널
- Linux/배포판
- Linux/환경변수
- Linux/소프트웨어
[1] 커널 홈페이지[2] Linux 재단 홈페이지[3] http://m.zdnet.co.kr/news_view.asp?article_id=20171030170645[4] https://web.archive.org/web/20200901154301/https://www.linuxfoundation.org/wp-content/uploads/2020/08/2020_kernel_history_report_082720.pdf[5] GNU Hurd. 1990년 첫 버전을 발표한 이래로 지금까지도 안정화가 안 된 물건이다. 이 때문에 후술할 Linux vs GNU/Linux 명칭 논란에서 언급되기도 한다.[6] Windows 10부터 지원. Linux 커널은 WSL2 부터 탑재됨.[7] LFS, 젠투, Arch Linux 같은 경우 그 모든 걸 유저가 선택해서 쓰는 걸 목표로 하고 있다.[8] dwm(C), xmonad(Haskell), ranger(Python) 등[9] NetBSD의 경우 지원되는 CPU 플랫폼이 50여개 정도이다. NetBSD의 모토는 "Of course it runs NetBSD!" 이다.[10] http://www.playstation.com/ps3-openplatform/index.html[11] 한때 전세계 33위, 미 국방부의 실시간 조작이 가능한 컴퓨터 중에서는 1위의 성능을 가진 물건이었다고 한다.[12] Github 주소[13] https://lkml.org/lkml/2006/9/25/161[14] 일례로, GNU Emacs 프로젝트의 빌드 타겟에서 Linux를 LiGNUx 로 바꾸었다가 linux-gnu로 수정한 적이 있다. linux-gnu면 glibc를 사용하는 시스템에서만 작동할 것 같지만, musl 시스템 구성에서도 정상적으로 빌드 및 실행할 수 있다.[15] GNU에서 UNIX를 대체할 자체 커널을 개발하고자 발족한 프로젝트. 1990년 개발 시작[16] 현재 마이크로소프트의 프로그래머로 근무하고 있다.[17] https://nakedsecurity.sophos.com/2016/02/22/worlds-biggest-linux-distro-infected-with-malware[18] http://blog.linuxmint.com/?p=2994[19] 이 사건의 여파가 상당이 컸는지 해당 사건 이후 배포판들은 대부분 해시값을 확인하라고 하며 Arch Linux 같이 자체적으로 해시값이 일치하는지 확인하는 프로그램도 깔려있는 경우도 많다.[20] Windows의 경우 커널에서 GUI를 담당하는게 아닌 win32k.sys라는 커널 모드 드라이버가 GUI 기능을 담당한다.[21] 윈도우 서버, 윈도우 시스템이라고도 한다.[22] GTK+에서 GTK로 명칭이 변경되었다. 무료이며 GTK 라이브러리 소스 코드 라이선스도 LGPL로 앱 소스 코드 공개/배포 필요가 없다.[23] Qt는 클로즈드 상용 프로그램에 사용시 유료이다.[24] 데스크톱용 GUI 환경을 그대로 사용할 수도, 필요 없는 부분을 치우고 아주 가벼운 GUI만 사용할 수도, 아니면 아예 사용하지 않을 수도 있다.[25] 구글, 사내 LinuxPC Ubuntu→Debian 갈아탄다. 물론 그 Ubuntu도 Debian 기반으로 나온 운영체제니까 Ubuntu 때랑 전반적인 환경은 크게 바뀌지 않을 것으로 보인다.[26] VNC 서버를 활성화해 연결해야되며 llvmpipe로 3D가속이 되며(사실상 소프트웨어 렌더링) 소리는 PulseAudio를 별도로 불러와야 한다.[27] https://store.steampowered.com/search/?sort_by=Released_DESC&tags=-1&category1=998&os=linux[28] http://www.phoronix.com/scan.php?page=article&item=valve_linux_dampfnudeln&num=1[29] 둠3, 퀘이크3, 리턴 투 캐슬 울펜슈타인 등.[30] 다만 게임은 실행 파일만으로 즐길 수 없으므로 Windows용 카피에서 실행 파일을 제외한 패키지 파일들(.pak)을 가져와야 한다.[31] 렌더링을 위해 수십~수천개의 컴퓨터를 서버마냥 돌리는 것이다.[32] SGI에 탑재된 UNIX의 일종인 OS[33] Unix 셸에서 사용되는 스크립트를 전부 Windows용 프로그램 또는 .bat으로 번역한다고 생각해보자.[34] 일부 프로그램들은 개인이 아닌 회사에만 Linux 버전을 제공하기도 한다.[35] https://web.archive.org/web/20150806093859/http://www.w3cook.com/os/summary/[36] https://w3techs.com/technologies/overview/operating_system/all[37] 셸 스크립트의 경우 완전한 호환을 원하는 스크립트는
#! /bin/sh
로 시작하고, 특정 셸을 통해 실행되기를 원하면 #! /bin/(셸의 이름)
으로 시작하는 식이다. 물론 전자의 경우에는 제한된 기능만을 사용할 수 있다.[38] 주로 *.tar.gz 등 압축 파일로 배포된다.[39] 별도의 패키지 설치 과정 없이 실행 권한만을 준 후 바로 실행할 수 있다.[40] Android 제외. Android는 Linux 커널만 가져다 썼을 뿐 사실상 다른 OS라 봐도 무방하다.[41] 영문에서 주로 'dependencies'라 하는 그것. 해당 프로그램의 구동에 필요한 부속 라이브러리 등을 의미한다.[42] 상술한 소스 코드 직접 설치 방식이 그렇다.[43] Gentoo Linux, Arch Linux, Debian sid 등 특별한 릴리즈 주기 없이 rolling-release를 사용하는 배포판은 모든 프로그램과 구성요소를 최신 버전으로 유지하여 의존성을 해결한다. 만약 한 의존 패키지의 버전이 올라가 이를 의존성으로 두는 패키지들이 더 이상 그 의존성을 해결할 수 없는 상황이 되면, 그 패키지들을 새 의존 패키지 버전에 의존성을 두도록 모두 다시 컴파일한다.[44] Docker의 경우 가상화 기술이긴 해도 패키지 매니저나 앱스토어는 아니다보니, 앱 설치를 위해 의존성 관리를 최적화한 앞의 것들과는 차이가 있다.[45] Java 그 자체를 쓰지 않고 이의 API를 이용한 것은 공정 이용이라고 보았다.[46] 반복을 위한 유일한 구문인 for문도 꽤나 기형적이고, continue나 break도 존재하지를 않아서 모든 반복문을 goto로 처리해야 한다! 이게 왜 문제냐면, 모두 goto로 처리하면 알아볼 수 없는 스파게티 코드가 될 가능성이 높기 때문이다.[47] GTK용 비주얼 빌더. VS의 XAML Designer에 해당[48] 마소의 VS는 Linux판이 없으나 Android Studio는 Linux판이 있다. Android 에뮬레이터도 지원하여 Linux에서 Android 앱 디자인에 최적. Java, Kotlin, 또는 Flutter 프레임워크가 있다. 웹브라우저에서 동작하는 웹 앱 소프트웨어 디자인도 가능하다.[49] 워드+DTP 통합; Frame/Column/Section/Style등의 강력한 레이아웃 기능이 있다.[50] PDF 편집툴로도 사용가능[51] 원노트 대체툴이다.[52] MPlayer와 같은 커맨드 라인 플레이어. MPlayer의 포크로 쓸데없는 기능들을 지우고 몇몇 새로운 기능을 추가했다. 화질도 더좋고 가벼워 Celluloid 등 여러 프론트엔드 미디어플레이어에서 백엔드로서 사용된다.[53] SPICE+QXL, SPICE+VirtIO(VirGL), GPU Full Passthrough 모드 등을 지원한다.