시그윈
1. 개요
시그윈(Cygwin)은 1995년 시그너스의 엔지니어 스티브 챔벌린이 개발한 프로젝트로, 윈도우에서 유닉스 셸 및 명령어를 실행할 수 있도록 하는 도구이다. 핵심 구성 요소인 `Cygwin1.dll` 런타임 라이브러리는 POSIX 시스템 호출을 제공하여 유닉스 프로그램이 윈도우에서 동작하도록 지원한다. 시그윈은 GNU Core Utilities, Bash 셸 등을 포함하며, X 윈도 시스템을 지원하여 그래픽 유닉스 프로그램을 윈도우 데스크톱에 표시할 수 있다. Cygwin은 패키지 관리 시스템을 통해 1만 개 이상의 오픈 소스 소프트웨어를 사용할 수 있으며, 런타임 라이브러리를 통해 유닉스용 프로그램을 윈도우에서 재컴파일하여 실행할 수 있게 한다. 시그윈은 시작 및 실행 시간이 오래 걸리고, 호환성 계층 DLL을 요구하는 등의 단점을 가지고 있다.
이미지 준비중입니다.
이미지 준비중입니다.
| 개발자 | 스티브 체임벌린, 시그너스 솔루션즈 |
|---|---|
| 개발 | 시그너스 솔루션즈, 레드햇, Cygwin 프로젝트 자원봉사자 |
| 최초 릴리스 | 1995년 10월 18일 |
| 최신 버전 | 3.5.3 |
| 최신 버전 출시일 | 2024년 4월 3일 |
| 운영 체제 | 마이크로소프트 윈도우 |
| 프로그래밍 언어 | C/C++ |
| 종류 | POSIX 표준 유틸리티, POSIX 표준 라이브러리, C 표준 라이브러리, 호환성 계층 |
| 라이선스 | GPLv3, LGPLv3 |
| 웹사이트 | Cygwin 공식 웹사이트 |
-
호환성 계층 -
와인 (소프트웨어)
와인(Wine)은 유닉스 계열 운영체제에서 윈도우 응용 프로그램을 실행하기 위한 호환성 계층으로, 윈도우 API를 직접 구현하여 윈도우 프로그램이 리눅스, macOS 등에서 실행되도록 지원하며, 여러 기업의 후원을 받아 꾸준히 발전해왔다. -
호환성 계층 -
카본 (API)
애플이 Mac OS 코드 기반 업그레이드를 위해 도입한 카본은 Mac OS 8.1과 호환되는 공유 라이브러리 형태로, 개발자들이 기존 Mac OS 환경에서 프로그램 실행 능력을 유지하며 코드를 이식하도록 지원했지만, 64비트 환경 전환과 macOS Catalina의 32비트 응용 프로그램 지원 중단으로 사용이 중단되었다. -
에뮬레이션 소프트웨어 -
에뮬레이터
에뮬레이터는 다른 프로그램이나 장치를 모방하는 컴퓨터 프로그램 또는 전자기기의 능력으로, 하드웨어 및 소프트웨어 모방을 포함하며 디지털 아카이빙과 뉴 미디어 아트 분야에서 중요한 역할을 한다. -
에뮬레이션 소프트웨어 -
Bochs
Bochs는 x86 PC 아키텍처를 에뮬레이션하는 오픈 소스 소프트웨어로, 다양한 하드웨어를 에뮬레이션하며 여러 운영 체제와 플랫폼에서 실행 가능하고, 디버깅 기능이 뛰어나 운영 체제 개발에 활용된다. -
레드햇 소프트웨어 -
매니지IQ
매니지IQ는 IT 부서의 효율적인 운영을 지원하는 소프트웨어로, 셀프 서비스, 규정 준수, 최적화 기능을 제공하며, 다양한 플랫폼을 지원하고 AI, 머신러닝 기술을 활용하여 클라우드 관리 기능을 개선하고 있지만, 기능 부족, 시스템 성능, 보안 취약점 등의 비판도 존재한다. -
레드햇 소프트웨어 -
레드햇 리눅스
레드햇 리눅스는 1995년 출시되어 상업용 리눅스 배포판 시장에서 중요한 역할을 했으며 RPM 패키지 관리자를 자체 개발하여 사용자 편의성을 높였으나, 2003년 11월 레드햇 엔터프라이즈 리눅스(RHEL) 출시와 함께 개발이 중단되고 무료 버전 배포는 페도라 프로젝트의 페도라로 이관되었다.
2. 역사
Cygwin은 1995년 Cygnus 엔지니어인 스티브 챔벌린의 프로젝트로 시작되었다. 그는 Windows NT와 95가 COFF를 오브젝트 파일 형식으로 사용하고, GNU가 이미 x86과 COFF, 그리고 C 라이브러리인 newlib를 지원한다는 것을 확인했다. 그는 GCC를 리타겟팅하여 Windows에서 실행할 수 있는 실행 파일을 생성하는 크로스 컴파일러를 만들 수 있다고 생각하여 프로토타입을 개발했다. 챔벌린은 부트스트래핑을 통해 Windows 시스템에서 컴파일러를 부트스트랩하여 Unix를 에뮬레이션하여 GNU configure 셸 스크립트가 실행되도록 했다.
1999년, Cygnus는 Cygwin 1.0을 상업 제품으로 제공했다. 이후 버전은 출시되지 않았고, 지속적인 오픈 소스 릴리스로 제공되었다.
프로젝트 리더는 제프리 노어 (1996년-1999년), 크리스토퍼 페일러 (1999년-2004년), 코리나 빈셴 (2014년 중반-현재, 2024년 9월 기준) 등이다.
2016년 6월 23일부터 Cygwin 라이브러리 버전 2.5.2는 GNU 약소 일반 공중 사용 허가서 (LGPL) 버전 3으로 라이선스가 부여되었다.
2.1. 개발 배경
시그윈은 1995년 시그너스의 엔지니어 스티브 챔벌린의 프로젝트로 시작되었다. 그는 윈도우 NT와 95가 오브젝트 파일 포맷으로 COFF를 사용하고, GNU가 이미 x86과 COFF, C 라이브러리 newlib 지원을 포함하고 있다는 것을 확인하였다. 그는 GCC의 대상을 변경하여 윈도우에서 동작 가능한 실행 파일을 만들어내는 크로스 컴파일러를 만들 수 있을 것이라고 생각하였다.
초기에 시그윈은 gnuwin32 (현재의 GnuWin32와는 다름)로 불렸다. 이 이름은 시그윈32로 바뀌면서 시그너스가 이를 만드는 역할을 강조하였다. 마이크로소프트가 Win32 상표를 등록하였을 때, gnuwin32에서 32를 제거하면서 시그윈이 되었다.
3. 기능
Cygwin의 핵심은 런타임 라이브러리 'Cygwin1.dll'이다. 이 라이브러리는 POSIX의 시스템 호출과 동등한 기능을 제공하여, 셸이나 명령어 등을 윈도우에서 소스 코드로부터 컴파일할 수 있게 해준다. 유닉스용 기계어 이진 코드를 에뮬레이션하는 것은 아니다. 각 프로그램은 Cygwin1.dll을 동적으로 링크함으로써 유닉스에서와 거의 비슷하게 동작한다. 유닉스용 프로그램 소스 코드도 큰 수정 없이 윈도우용으로 컴파일할 수 있다.
유닉스 시스템 V에서 유래한 IPC을 이용하는 응용 프로그램을 위해 런타임 라이브러리에서 서비스(NT 서비스)를 제공한다. PostgreSQL은 이 서비스가 제공하는 공유 버퍼나 세마포어를 이용해 동작한다. PostgreSQL 자체는 버전 8.0 이후 Cygwin 의존에서 벗어나 Win32 네이티브로 소스 코드가 재작성되었다.
Cygwin은 다음과 같은 기능을 제공한다.
* MinGW를 사용하여 네이티브 윈도우 응용 프로그램 작성 지원
* sh (본 셸) 스크립트 지원
* rsh, ssh, telnet을 사용한 원격 로그인 지원
* PSP, PS2 등 임베디드 크로스 플랫폼 지원
* X 및 오픈GL 지원
* 윈도우 비스타 지원
* 표준 C 라이브러리로 Newlib를 사용한다.
Cygwin은 64비트 버전과 32비트 버전으로 제공된다. 32비트 버전은 2022년에 최종 버전이 출시되었다. GNU 개발 도구 체인(GCC, GDB 포함)을 포함하며, X 윈도 시스템, K 데스크톱 환경 3, GNOME, 아파치 등이 이식되었다. Cygwin은 inetd, syslogd, sshd, 아파치 등을 표준 윈도 서비스로 설치할 수 있다. Cygwin 프로그램은 Windows API 및 기타 Windows 라이브러리에 접근할 수 있다.
Cygwin 프로그램은 "설정" 프로그램을 실행하여 인터넷 저장소에서 다운로드하여 설치한다. Cygwin API 라이브러리는 GNU Lesser General Public License 버전 3(또는 이후 버전)에 따라 라이선스가 부여되며, 오픈 소스 정의를 준수하는 모든 자유 및 오픈 소스 소프트웨어에 연결할 수 있도록 예외가 적용된다.
Cygwin은 POSIX API에 대한 호환성 계층 역할을 하는 C 표준 라이브러리 형태의 동적 링크 라이브러리와, 유닉스와 유사한 모양과 느낌을 제공하는 프로그래밍 도구 및 응용 프로그램 모음으로 구성된다.
Cygwin은 POSIX 심볼릭 링크를 지원하며, Windows 탐색기 파일 바로가기로 표현했지만 성능 및 POSIX 정확성을 위해 변경되었다. NTFS 연결 지점 및 심볼릭 링크를 인식하고 POSIX 심볼릭 링크로 처리하지만 직접 생성하지는 않는다. 액세스 제어 목록 (ACL)을 처리하기 위한 POSIX API가 지원된다.
마이크로소프트는 윈도우 서버 2012부터 UNIX 기반 애플리케이션용 하위 시스템을 더 이상 사용하지 않으며, 대안 중 하나로 Cygwin의 POSIX 에뮬레이션 모드를 소개하고 있다.
` /dev/mem` 기능은 1.7.22에서 중단되었다.
3.1. 윈도우와의 호환성
Cygwin은 윈도우 커널의 API를 이용하며, VMware나 VirtualBox와 같은 가상 머신이 아닌 호환 레이어로 동작한다. GNU Core Utilities와 같은 UNIX의 기본 명령어와 Bash가 제공된다. Cygwin 터미널에서는 윈도우 바이너리(.exe)도 호출할 수 있으며, 파이프를 통해 유닉스 앱과 윈도우 앱의 협업이 가능하다.
Cygwin은 윈도우의 파일 시스템을 그대로 다룰 수 있어, 윈도우에서 작성한 데이터와 Cygwin에서 작성한 데이터를 섞어서 처리할 수 있다. 윈도우에서 할당한 네트워크 드라이브에 Cygwin에서 접근할 수 있다.
4. 패키지 관리
Cygwin 설치 (GUI 기반)는 패키지 관리 시스템으로도 활용할 수 있으며, 1만 개 이상의 풍부한 오픈 소스 소프트웨어를 사용할 수 있다. Cygwin 설치 후에도 이것을 사용하여 소프트웨어의 구성 변경, 설치, 제거, 업데이트를 할 수 있다. CUI 환경에서는 apt-cyg라는 명령어를 사용하여 패키지 관리를 할 수 있다.
Cygwin Ports 프로젝트는 Cygwin 배포판 자체에서는 사용할 수 없는 추가 패키지를 제공했었지만, 현재는 유지 관리되지 않는다.
5. 런타임 라이브러리 (Cygwin1.dll)
런타임 라이브러리인 ‘Cygwin1.dll’은 시그윈의 핵심이다. Cygwin1.dll은 POSIX의 시스템 호출과 동등한 기능을 제공하여, 유닉스용 프로그램의 소스 코드를 큰 수정 없이 윈도우용으로 재컴파일할 수 있게 해준다. 각 프로그램은 이 라이브러리를 동적으로 링크함으로써 유닉스에서와 거의 비슷하게 동작한다.
표준 C 라이브러리로는 GNU C 라이브러리(glibc) 대신 Newlib가 사용되며, cygwin1.dll이 이를 제공한다. 따라서 Cygwin으로 컴파일한 C/C++ 소프트웨어를 Cygwin이 설치되지 않은 환경에서 실행하려면 cygwin1.dll도 함께 제공해야 한다.
유닉스 시스템 V에서 유래한 IPC를 이용하는 응용 프로그램을 위해, 런타임 라이브러리에서 서비스(NT 서비스)를 준비해 놓고 있다. PostgreSQL은 이 서비스가 제공하는 공유 버퍼나 세마포어를 이용해 동작한다.
5.1. 기술적 세부 사항
Cygwin 전용 버전의 유닉스 `mount` 명령어를 사용하면 윈도우 경로를 유닉스 파일 공간에서 "파일 시스템"으로 마운트할 수 있다. 초기 마운트 지점은 `/etc/fstab`에서 구성할 수 있으며, 이는 장치 대신 윈도우 경로가 표시된다는 점을 제외하면 유닉스 시스템과 매우 유사한 형식을 갖는다. 파일 시스템은 (기본적으로) 바이너리 모드 또는 텍스트 모드로 마운트할 수 있으며, 텍스트 모드에서는 변환 사이에 자동 LF 및 CRLF 종료가 활성화된다(이는 텍스트 또는 바이너리 모드를 명시적으로 지정하지 않고 파일을 여는 프로그램에만 영향을 미친다).
Cygwin 1.7은 POSIX 로케일에 대한 포괄적인 지원을 도입했으며, UTF-8 유니코드 인코딩이 기본값이 되었다.
프로세스를 복제하기 위한 fork 시스템 호출이 완전히 구현되었지만 copy-on-write 최적화 전략은 사용할 수 없었다.
Cygwin DLL에는 Unix 스타일의 터미널을 윈도우 콘솔 내에서 에뮬레이션하는 콘솔 드라이버가 포함되어 있다. Cygwin의 기본 사용자 인터페이스는 Cygwin 콘솔에서 실행되는 bash 셸이다. DLL은 또한 pseudo terminal (pty) 장치를 구현한다. Cygwin은 mintty, rxvt/urxvt 및 xterm을 포함하여 이를 기반으로 하는 여러 개의 terminal emulator를 제공한다. Cygwin과 함께 제공되는 GCC 버전에는 프로그램이 창 모드인지 콘솔 모드인지 지정하는 등 윈도우 DLL을 만들기 위한 다양한 확장 기능이 있다.
`'/dev/mem` 기능은 1.7.22에서 중단되었다. 현재 이 기능을 사용한 프로그램은 작동하지 않는다.