- 리눅스 토발즈가 커널 개발 / 커널: 소스 공개, 누구나 수정 및 패키징하여 자유롭게 배포 가능
-
GNU(GNU’s Not UNIX)
- 리처드 스톨만
- 유닉스와의 호환 + 더 놓은 기능의 운영체제를 만들고자 했던 프로젝트
- 자유로운 유닉스를 만들고자 함 / 자유로운 소프트웨어 사용 / 상업화 반대
- GCC, BASH, EMACS
-
FSF(Free Software Foundation)
- 자유 소프트웨어: 상업적 목적으로 사용 가능 / 소스 코드 임의로 개작 가능 / 소스 코드 수정 시 반드시 소스 코드 공개
- 리처드 스톨만
- 자유 소프트웨어의 생산, 보급, 발전을 목표로 만든 비영리 조직
- 자유 소프트웨어 재단 / 무료나 공짜의 뜻X, ‘구속되지 않는다’는 관점에서의 자유
-
GPL(General Public License)
- 소스코드 무료 수정 가능, 수정한 코드도 GPL 라이선스 적용
- 카피 레프트 / 독점 소프트웨어와 결합 불가
-
LGPL
- 리처드 스톨만
- GPL의 강한 카피레프트 조건, 수정한 코드 비공개 가능
- 자유 소프트웨어 + 독점 소프트웨어에서 사용 가능
-
BSD(Berkeley Software Distribution)
- 공개 소프트웨어 라이선스
- 아무나 맘대로 사용 가능, 수정 코드 비공개 가능
- 소스코드 공개하지 않는 상용 소프트웨어에서도 사용 가능
-
아파치(Apache)
- 누구나 자유롭게 소프트웨어 다운로드 가능
- 부분 혹은 전체를 개인적 혹은 상업적 목적으로 이용 가능
- 재배포 시에도 소스코드 혹은 수정한 소스코드를 포함하여 반드시 공개 의무X
- 재배포할 경우, 아파치 라이선스 2.0 포함 의무 / 아파치 소프트웨어 재단에서 개발된 소프트웨어임을 명확히 밝혀야 함
-
MPL(Mozilla Public License)
- 해당 라이선스 적용된 소스코드 수정 시에는 소스코드 공개 필수
- 다른 코드와 소스코드 결합하여 만든 프로그램: MPL코드를 제외한 다른 소스코드 공개 의무X
- 정리
- 무료 이용, 배포 허용, 소스코드 취득 및 수정 가능: GPL, LGPL, BSD, Apache, MPL, MIT
- 2차 저작물 소스코드 공개 의무: GPL, LGPL, MPL / L로 끝나는 라이선스 (BSD, Apache, MIT는 2차 저작물 소스코드 비공개 가능)
- 독점 소프트웨어와 결합 불가능: GPL (나머지는 전부 가능)
- 다중 사용자, 다중 처리 시스템: 다수의 사용자들이 동시 접속하여 각각 다수의 응용프로그램 실행 가능
- 공개된 시스템: 커널 + 같이 내장되어 배포되는 대부분의 응용프로그램의 소스 공개
- 뛰어난 네트워크 환경
- 이더넷, SLIP, PPP, ATM 등 다양한 네트워크 환경과 TCP/IP, IPX, AppleTalk 등 대부분의 네트워크 프로토콜 지원
- TCP/IP, IPX, AppleTalk 등 대부분의 네트워크 프로토콜 지원
- 다양한 파일 시스템 지원
- 리눅스 고유의 파일 시스템(ext2~4)
- DOS의 FAT, Windows의 fat32 및 NFTS 등의 상용 유닉스 파일 시스템
- 저널링(Journaling) 파일 시스템: ReiserFS, XFS, JFS / 시스템 다운 시 즉시 복구 가능
- 뛰어난 이식성: 약간의 어셈블리 + 대부분이 C언어 / 쉽게 다른 시스템에 이식 가능
- 유연성, 확장성: 쉬운 이식성, 자유로운 배포 가능, 커널 소스 공개
- 다양한 응용프로그램 제공
- 다양한 배포판: 서버, 개발용, PC용 등 다양한 목적으로 사용 가능 / 유료, 무료 모두 존재
- 유닉스 표준인 POSTIX 준수
- 특정 하드웨어에 대한 지원 부족: 특정한 하드웨어에서는 설치 어려움, 모든 플랫폼에서 작동하지는X
- 사용자의 숙련된 기술 요구: 아직도 중요한 설정은 직접 명령어 입력 혹은 편집기를 통해 환경 설정 파일 편집 필요
-
계층적 파일 구조: /(root) 기준으로 하위 디렉터리에 usr, var, home 등이 존재, ... / 트리 구조
-
가상메모리(SWAP): 하드디스크의 일부를 메모리처럼 사용
- 하드디스크: 데이터 저장 공간 / RAM(메모리): 작업 공간
- 프로그램 실행 -> 메모리로 공간 이동 / 메모리의 공간이 작으면 프로그램 실행 불가
- 위 문제점 극복을 위해 가상메모리 사용
- 스와핑(Swapping): 메모리와 하드디스크 사이의 데이터 교환
- 공간이 꽉 찼다고 하더라도 가상메모리 설정 시 추가로 새로운 프로그램 실행 가능
- 메모리에 올라와 있지만 사용하지는 않고 있는 프로그램을 하드디스크에 설정된 가상메모리 공간으로 보내고 그 빈 공간에 새 프로그램 로딩
-
라이브러리(Library): 프로그램에서 특정한 기능을 하는 루틴들의 모임 / 공간 효율성 매우 높음
- 공유 라이브러리를 통한 효율적 메모리 사용
- 하드디스크 공간의 효율성을 높여준 기술
-
가상 콘솔: 하나의 모니터를 장착한 시스템에 여러 가상 화면을 제공해서 사용하게 하는 기능
- 현재 로컬 시스템 상에서 특정 사용자로 로그인 중 -> 다른 계정에게 메시지 보내는 실습을 위해 추가 로그인하는 경우
- 이미 지나간 작업 보기 위한 키 조합: Shift + PageUP
-
파이프(|): 프로세스의 통신을 위해 도입 / 어떤 프로세스의 표준 출력이 다른 프로세스의 표준 입력으로 쓰이게 하는 것 / 여러 명령 조합 시 사용
-
리다이렉션(Redirection): 어떤 프로세스의 입출력을 표춘 입출력이 아닌 다른 입출력으로 변경 / 출력 결과를 파일로 저장하거나 파일 내용을 프로세스의 입력으로 사용
-
모든 장치 파일화하여 관리
-
고계산용 클러스터(HPC): 고성능의 계산 능력 제공
- 여러 대의 컴퓨터를 병렬로 묶어 구성
- 슈퍼컴퓨터 제작에 사용
-
부하분산 클러스터(LVS): 대규모 서비스 제공
- 여러 대의 리얼 서버 + 부하 분산해주는 로드 밸런서(Load Balancer)
- 이용자가 많은 웹서비스 등 활용가치가 높음
-
고가용성 클러스터(HA): 지속적 서비스 제공
- 부하분산 클러스터와 연동하여 많이 사용
- 하나의 Primary Node: 부하분산 처리 수행
- 다른 하나의 Backup Node: Primary Node의 상태 체크하고 있다가 이상 발생 시 서비스 이어 받는 구조