Cygwin

내위키

Cygwin.

웹사이트는 당연히 www.cygwin.com.

원래는 시그너스 솔루션에서 만든 윈도우 운영체제용 리눅스 에뮬레이터.[1] 한때 레드햇이 인수해서 개발을 진행했지만 지금은 결별한 것으로 보인다. 지금은 저작권이 'Cygwin authors'로 되어 있으며, 개발진 역시 개인 이름만 언급하고 있다. 홈페이지에서 무료로 다운로드 받을 수 있다.

Cygwin 웹사이트에서는 Cygwin을 다음과 같이 소개하고 있다.

  • 윈도우에서 리눅스 배포판과 유사한 기능을 제공하는 대규모 GNU 및 오픈 소스 도구 모음이다.
  • POSIX API 기능의 상당 부분을 사용할 수 있는[2] DLL(cygwin1.dll)을 제공한다.

윈도우 환경 안에서 GNU 유틸리티를 비롯한 각종 POSIX 기능을 쓸 수 있도록 이식한 소프트웨어 패키지다. 32비트와 64비트용이 있다. VMWare하이퍼-V 같은 가상머신 프로그램으로 가상 컴퓨터를 하나 만들어서 리눅스 같은 다른 운영체제를 설치할 수도 있지만 이 경우에는 윈도우 파일 시스템과 분리되어 별개의 컴퓨터처럼 동작한다. 단, WSL은 가상머신이지만 윈도우와 상호 파일 시스템에 접근이 가능하다. 반면 시그윈은 POSIX API를 지원하는 cygwin1.dll이라는 동적 라이브러리를 기반으로 기존의 윈도우 파일 시스템 위에 얹혀서 돌아간다. 따라서 윈도우 시스템 안에 있는 파일이나 디렉터리에 손쉽게 접근할 수 있는 게 장점이다. bash로 들어가면 기본 파일 디렉터리는 리눅스와 똑같은 구조지만[3] /cygdrive/c, /cygdrive/d 같은 식으로 윈도우의 C, D 드라이브로 접근할 수 있다. 심지어는 Cygwin 쉘에서 윈도우 응용프로그램을 실행할 수도 있다. notepad처럼 이미 패스 지정이 되어 있으면 윈도우 프로그램도 곧바로 실행할 수 있다. 반면 리눅스용으로 바이너리 패키지화 된 프로그램을 바로 설치해서 쓸 수는 없다. 시그윈에서 제공하지 않는 프로그램은 정 필요하면 직접 컴파일해서 써야 한다.[4] 대신 시그윈의 명령 프롬프트에서 윈도우 프로그램의 이름을 입력해서 실행시키는 것은 가능하다. 또한 컴퓨터에서 가상머신을 돌리는 건 램도 많이 잡아먹고 부하가 많이 걸리며 속도가 느려 터지지만 시그윈은 시스템 자원도 덜 먹고 속도도 빠르다.[5]

처음에는 Bash 쉘과 GNU 유틸리티 일부 정도만 쓸 수 있었지만 이제는 X윈도우를 띄우고 KDE그놈을 돌릴 수 있는가 하면 아파치 웹서버도 이식되었다. PHP는 당연히 쓸 수 있고, MySQL도 윈도우용을 설치한 다음 PHP로 연결할 수 있다. 아예 MySQL이나 PostgreSQL을 시그윈 용으로 이식하는 프로젝트도 있으니. 윈도우가 깔린 컴퓨터에서 시그윈을 이용해서 웹서버를 돌리는 것도 가능하다. 그럴 거면 그냥 리눅스나 WSL 쓰시지요. 시그윈을 설치하는 과정에서 설치할 수 있는 소프트웨어 패키지의 목록을 볼 수 있는데 정말 광범위하다. GNU C 컴파일러도 이식되었기 때문에 리눅스 환경의 컴파일 및 빌드에 익숙하다면 소스코드로부터 빌드해서 시그윈에서 쓸 수도 있다. 다만 X윈도우 쪽 프로그램들은 속도가 많이 느리므로 그냥 쓸 수 있다는 것에 의의를 두는 게 속 편하며, 웹서버를 비롯한 서버용으로 쓰는 것 역시 피하는 것이 좋다.

커널 자체는 윈도우기 때문에 리눅스 시스템을 대신하기에는 한계가 있고 모든 소스코드가 호환되는 것도 아니다. 기본 제공되는 명령도 리눅스에 비하면 기능이 많이 부족한 것들이 눈에 띈다. 그 대표격이 ps 명령인데, 옵션 목록을 보면 리눅스에 제공되는 ps와 비교해 볼 때 선택의 폭이 정말 적다. 또한 기본적인 bash 명령 중에서도 지원이 아예 안 되는 것도 상당수 있다. 이 때문에 Cygwin 측에서도 POSIX API 기능의 '상당 부분'을 제공한다고 밝히고 있다.

윈도우가 오픈 소스 친화 정책으로 돌아서면서 아예 가상화 기술로 윈도우 위에서 리눅스 커널을 실행시킬 수 있는 윈도우 서브시스템 리눅스(WSL)를 만들었기 때문에 윈도우 환경에서 리눅스를 돌리려면 이쪽이 Cygwin보다는 더욱 확실한 대안이다. Bash 쉘과 많이 쓰이는 기본 POSIX 유틸리티들로 충분하다면 윈도우용 Git이 제공하는 Git Bash도 좋은 대안이다. 특히 개발자들은 Git을 많이 쓸 수밖에 없으므로 Git Bash로 퉁치는 사람들이 많다.

그래도 리눅스에 익숙한 사람들이 윈도우 깔린 컴퓨터를 리눅스 방식 쉘로 관리하고 싶다든가 할 때는 여전히 쓸만한 대안이다. 윈도우에도 명령 프롬프트가 있지만 MS-DOS 시절의 유전자를 그대로 계승하고 있기 때문에 유닉스에 익숙한 사람들에게는 그야말로 쓰레기 수준이다. 이들에게는 윈도우 PowerShell이라고 해서 별로 나은 것도 아니다. WSL은 리눅스를 가상머신으로 쓸 수 있도록 해 주지만 아예 운영체제를 하나 더 설치하는 것인 만큼 그만큼 용량이 크고 무겁다. Cygwin은 가상 머신이 아니므로 훨씬 가볍다. 딴 거 다 필요 없고 단지 윈도우 환경에서 bash 쓰려고 시그윈 쓰는 사람들이 많다. 좀 더 나가자면 ssh, ftp, telnet 같은 텍스트 기반의 네트워크 접속도 리눅스 식으로 쓸 수 있어서 편하다. 그러나 이 정도 기능은 Git Bash도 거의 다 지원한다. 사실 WSL 정도까지는 필요 없지만 Git Bash로는 안 되는 기능을 원하는, 즉 Cygwin 아니면 안 되는 사용자는 얼마 없을 것이다. Cygwin으로 X윈도우를 쓸 수 있다고 하지만 과연 그 정도까지 필요한 사람이 얼마나 있을까? 게다가 Cygwin이 제공하는 X윈도우 기능은 제한적이라 정말로 X윈도우 인터페이스가 필요하다면 WSL이 더 나을 것이다.

설치는 간단해서, setup-x86.exe (32비트 버전) setup-x86_64.exe (64비트 버전) 중 하나를 설치하면 된다. 설치하는 과정은 마법사 인터페이스로 쉽게 따라가면 되는데, 다운로드 사이트를 선택할 때에는 국내의 미러 사이트인 http://ftp.kaist.ac.kr을 선택해 주면 된다. 그러면 패키지 리스트를 받아서 설치하고 싶은 것을 설치할 수 있도록 목록이 뜨는데, 원하는 것을 체크하면 된다. X윈도우를 설치하고 KDE그놈도 설치할 수도 있지만 아무래도 느리니 지나치게 기대하지는 말자.

리눅스의 yum이나 api-get 같은 소프트웨어 패키지 관리자가 하는 일은 설치프로그램이 대신해 준다. 패키치의 설치와 삭제, 관리, 업그레이드를 모두 해 준다. 패키지를 업데이트하고 싶으면 설치 프로그램을 다시 실행시켜 주면 된다. 설치된 버전과 저장소에 있는 버전을 비교해서 새 버전이 있으면 업데이트해 준다. 시그윈 자체의 버전이 올라갔을 때에도 마찬가지로 설치 프로그램을 다시 받아서 실행시켜 주면 된다.

각주

  1. 리눅스라는 놈이 원래 리누스 토르발스가 만든 리눅스 커널에 GNU의 각종 유닉스 유틸리티 프로그램들을 붙여 놓은 게 기본이라 리눅스 에뮬레이터라고 단순히 이야기하기에는 조금 애매한 면이 있다. 시그윈이 리눅스 커널과 호환되는 게 아니기 때문. 가장 정확한 표현은 'POSIX와 유사한 런타임 환경'이라고 할 수 있다. 다만 사용 방식이 수많은 유닉스 계열 운영체제 중에서는 리눅스와 가장 가깝긴 하다. 제작사 쪽에서는 '윈도우에서 리눅스 배포판과 비슷한 기능을 제공한다'고 Cygwin을 소개하고 있다.
  2. 태생이 윈도우 운영체제 안에서 돌아가는 프로그램이라서 POSIX 기능을 전부 제공해 주지는 못한다.
  3. 시그윈을 설치하면 루트에 cygwin 또는 cygwin64(64비트) 디렉터리가 생기며, 이 아래에 유닉스 구조의 디렉터리 트리가 만들어지고 시그윈 파일들이 설치된다.
  4. gcc를 비롯한 컴파일러도 제공한다.
  5. 물론 가상머신보다 빠르다는 것이지 애초에 리눅스를 설치해서 쓰는 것보다는 당연히 느리다.