윈도우 / MS 이전 글에서 언급한 대로 Linux Subsystem이 추가 됨
2016.04.07 03:34
이전 글에서 언급했던 대로 Native Linux Subsystem이 추가되었습니다. Inside 멤버들은 이번에 배포된 14316 Preview Build를 설치하면 됩니다.
쉽게 이해하면 Linux Kernel System call 레이어를 네이티브로 지원하기 때문에 VM, Emulation 환경 없이 Windows 시스템에 Pure Linux Shell 환경을 갖고 있다고 생각하면 됩니다.
Cygwin, MSys 같은 에뮬레이션 환경은 리눅스 코드를 Win32 API를 이용해서 포팅한 거기 때문에 Pure Linux 환경이 아니라 플렛폼 간의 차이로 인한 제한이 있지만 Native Linux Subsystem 레이어에서는 Pure Linux Shell 환경에 더 가깝게 작업을 할 수 있게 되죠.
리눅스 소스패키지를 받아서 소스코드를 수정하지 않고 Win32 포팅과정 없이 그대로 컴파일 할 수 있고, 이게 귀찮으면 미리 리눅스용으로 컴파일 되어있는 Pure ELF 포맷의 바이너리 패키지를 받아서 그대로 실행할 수도 있고요. X-Window 리눅스 GUI 까지 생각하고 있는 분들이 있는 것 같은데 Native Linux Subsystem 레이어의 포커스는 콘솔 까지 입니다. 일반 엔드유져 사용자들은 별거 아닌 거라고 생각할 수도 있겠지만, 크로스 플렛폼을 개발하는 개발자들 에게는 상당히 편리하고 유용한 겁니다.
안드로이드 커널 빌드 부터 테스트 해봐야겠네요.
댓글 [23]
-
DarknessAngel 2016.04.07 07:27
-
kernel 2016.04.07 08:13
-
kernel 2016.04.07 08:19
위와 같이 rootfs 아래로 리눅스 기본 디렉토리가 생성 됩니다. Windows 10 에 Ubuntu로 패키징 되어있는 리눅스 파일시스템을 갖고 있다고 보면 됩니다. 물론 패키지는 리눅스용으로 컴파일 되어있는 Pure ELF 형식의 바이너리 입니다. Native Linux Subsystem Layer를 통해서 Linux Kernel System call 레이어를 시스템 레벨에서 지원하기 때문에. bash 리눅스 쉘 그대로의 환경과 마찬가지로 작업하면 됩니다.
-
kernel 2016.04.07 08:22
-
kernel 2016.04.07 08:25
Win32 PE 형식의 bash.exe는 실제 적인 쉘이 아니고 rootfs 시스템이 초기화 되어있지 않으면 셋업하고, 셋업되어있으면 실제적인 리눅스 쉘 역할을 하는 rootfs/bin/bash EFL 형식의 리눅스 바이너리가 실행되게 됩니다. bash.exe Win32 프로그램은 일종의 house-keeping 역할만 하게 됩니다.
Linux Development 패키지는 디폴트로 셋업에 포함되어 있지 않습니다. 실제 리눅스에서 처럼 필요한 Development 패키지를 apt-get으로 내려 받아서 설치하면 됩니다. 출근 때문에 바빠서...
-
DarknessAngel 2016.04.07 18:15
필요한건 apt-get으로 다 받으면 되겠군요 (정보 감사합니다)
그런데 파일 시스템 지원은 어떻게 되었는지? (최저한도로 보편적인 ext2/3/4 읽기/쓰기/포맷정도및 permission/owner정도는 지원해줘야하는데...)
-
단편지식 2016.04.07 10:39
정보 감사합니다.
-
그린cnc 2016.04.07 14:55
요즘 MS 하는 짓 보면 이뻐 죽겠지 말입니다.ㅎㅎ
좋은 정보 감사합니다
-
오펜하이머 2016.04.07 22:59
14316 설치완료 했는데 32비트라서인지 배시는 포함되지 않았습니다.
x64 버전에만 포함된건가요?
-
심심한시에리 2016.04.07 23:12
기능 설치가 필요합니다. 제어판에서 '기능' 으로 검색하시면 Windows 기능 켜기/끄기 가 있는데요. 여기서 Windows Subsystem for Linux ( Beta ) 를 설치해야 합니다.
-
오펜하이머 2016.04.07 23:22
역시 거기에도 없네요.
아마 x64로 다시 설치해야 볼수 있을것 같군요.
-
그린cnc 2016.04.08 00:25
64비트 설치해야 되네요
-
kernel 2016.04.08 00:50
GCC 컴파일러 툴체인 소스코드를 빌드해서 컴파일러 바이너리를 만들어 봤는데, 실제 리눅스 OS에서 작업하는 것과 동일한 결과가 나옵니다. auto tool, build script 정상적으로 수행되고. CPU 가상화 해서 하이퍼바이저 레이어 위에서 돌리는 것 보다 리소스도 안먹고 가볍네요. Windows OS 위에서 다이렉트로 돌아가다 보니 빠를 수 밖에 없는. Win32 API를 이용한 에뮬레이션 환경 보다 더 리눅스 쉘 환경에 가깝고. 아직 베타 단계라서 모든 Linux Kernel API가 Windows 10 Linux Subsystem 레이어를 통해서 지원되는 건 아니지만. 이건 계속 다듬어 질테고.
-
kernel 2016.04.08 15:06
-
kernel 2016.04.08 15:12
Native Linux Subsystem 레이어에서 리눅스 쉘 환경을 테스트 하기 위해 GCC 컴파일러 툴체인 소스코드를 빌드해서 컴파일러를 만들어 본 결과, 실제 리눅스 OS에서 작업한 것과 동일한 결과를 얻을 수 있었고, 빌드된 컴파일러 바이너리로(Pure ELF64 실행파일) 컴파일도 정상적으로 됨을 확인 할 수 있었다.
Windows 10 14316 빌드가 아직 까진 여러 버그를 갖고 있어서 일반 엔드유져 사용자들이 실컴에서 사용하기는 적절해 보이지 않지만, 크로쓰 플렛폼을 개발하는 개발자 들은 실컴에 설치해서 사용해 봐도 좋을 듯 싶다.
-
오펜하이머 2016.04.08 19:06
윈도 시스템을 완전히 뜯어고치지 않는한
네이티브로 보기는 무리고 메모리와 디스크 일부를 할애하므로 리모트 터미널이나 vm과 별반 다르지 않다고 보면 될거같습니다
즉 완전 겪리돼서 리눅스 커멘드는 cmd에서 일체 실행할수 없거나 어떤 값을 전달 또는 공유할할 어떤 수단도 없으며 아파치같은 서비스용도로 사용하는것 역시 무리입니다. -
kernel 2016.04.08 20:10
여기서 Native 라는 것의 의미는 시스템 레벨에서 Linux kernel System Call 레이어를 두어서 Win32 API를 이용해서 포팅한 에뮬레이션 필요 없이, 실제 리눅스 OS에서 컴파일된 바이너리 까지도 직접 Windows 에서 실행할 수 있다는 건데 의미를 잘못 파악하고 있는 듯 하네요.
그리고 파일시스템을 Shadow 라우팅 하는 구조를 갖고 있기 때문에 Windows 애플리케이션에서 Linux 파일 시스템을 액세스하는 것도 가능 합니다. 또 그 반대로 Windows 파일 시스템을 마운트 할 수 있기 때문에 리눅스 프로그램에서 Windows 파일시스템을 액세스 하는 것도 가능 하고요. 어떤 수단도 없는 게 아닙니다.
프로그래머라면 Subsystem 아키텍쳐를 직접 분석 해보세요. 그럼 내부 구조를 알 수 있을 겁니다...
-
오펜하이머 2016.04.08 20:25
툴체인을 통한 크로스 컴파일은 되겠지만 실행환경은 베이스 시스템과 완전 겪리돼있어 VM과 다를바 없다는 것입니다.
예를들어 로드된 .dll과 .so 간에 자료교환이나 객체접근 등은 막혀있다는거죠.
-
오펜하이머 2016.04.08 21:31
어카운트는 root 싱글유저 시스템 같습니다..(무비번)
.deb Repository 경로도 모두 죽은 경로로 돼있어 한국주소로 직접 수정해줘야 apt-get을 쓸수 있습니다.
실제 커널이 부팅되는게 아니라 dmesg로 아무것도 볼수 없고 ifconfig도 안됩니다.
유니코드지만 로케일은 오직 EN-US 이며 / 위치는 로컬이 아닌 클라우드상에 있다고 나오네요. (중요)
이로서 리눅스 클라우드 버전이 아닐까 합니다
결론적으로 리눅스로 어떤 작업을 하고있다면 기존 방식대로 하는게 정신건강에 좋으며
윈도에서 정 리눅스 커멘드를 써보고자 한다면 busybox-win32가 있습니다.
https://frippery.org/files/busybox/busybox.exe
-
kernel 2016.04.08 22:58
싱글 유져시스템 아닙니다. 위와 같이 사용자를 추가할 수 있고, kjd 라는 이름으로 유져를 추가하면 kjd 유져를 위한 홈디렉토리도 추가로 생성되고 소유자와 OwnerShip 관계도 지원되는 멀티 유저 시스템 입니다. 직접 리눅스 코드를 컴파일하든가 아님 바이너리로 내려 받아서 시스템을 확장하면 됩니다.
그리고 Repository 경로가 죽어 있는 경로라서 그런게 아니고, DNS 가 디폴트로 ipv6 로 셋팅되어 있어서 그런 거고요. 리눅스 환경에 익숙하다면 먼저 이 부분 부터 확인해 보았을 겁니다. 로케일이 오직 EN-US만 지원되는 것도 아니고, 환경을 설정하면 위와 같이 fr_FR로 할 수도 있습니다. Ubuntu 패키지를 그대로 옮긴 축소판이라고 볼수 있죠. 필요한 것들은 본인이 시스템을 확장하면 되는 거고.
busybox-win32 라는 것 별거 아닙니다. MinGW 를 이용해서 컴파일 한 거기 때문에 내부적으로 Win32 API를 사용하는 에뮬레이션 환경과 다를 바 없는 겁니다. 에뮬레이션 환경을 Native Kernel System Call 레이어와 비교하는 건 말도 안되는 코미디 같은 얘기 아닙니까.
Subsystem 레이어는 Windows Kernel System과 타이트하게 커플링 되어있지도 않습니다.
Microsoft 사가 Windows OS에 구현해 놓은 Linux Kernel System Call 레이어가 디바이스 드라이버로 구현되어 있기 때문에 사용자가 필터 드라이버를 만들어서 쉽게 확장할 수도 있죠.
GCC로 리눅스 코드를 만들어서 bash 에서 돌리고, VC++로 Win32 프로그램 만들어서 서로 물리적으로 다른 환경에서 실행되는 두개의 프로그램 간에 데이타를 주고 받는 것도 쉽게 구현할 수 있습니다. Subsystem 구조를 모르고 있으면 황당한 얘기로 들릴 수도 있겠지만요.
파티션을 나누고 포맷해서 시스템을 설치해 사용하는 VM환경과 그런 구차한 과정 필요 없이 리눅스 쉘 환경을 Native로 그대로 사용할 수 있도록 하는 Subsystem은 설계 목적과 아키텍쳐가 본질적으로 다른 겁니다.
-
QnA_joaa 2016.04.09 09:05
정보 잘보고 배우고 있습니다. 마소가 화합으로 진로를 변경하니 이런것도 보게 되는군요.
-
그린cnc 2016.04.09 19:52
kernel님 같은 고수분이 멋진 PE 만들어 배포해 주시면 좋을텐데 말입니다. PE는 안만드시나요 ㅎㅎ -
아름드리나무 2016.04.17 18:26
클라우드 기반이 맞는거같네요. 64비트로 깔았는데 이렇게 뜨면서 개발버전 쓰라고 나오네요.
automake나 Configure스크립트, bash스크립트, gcc 제대로 되는지?
최저한도 이 4개가 제대로 안 작동하면 네이티브 바이너리는 커녕 컴파일 스크립트조차 제대로 안 됩니다