Баш на Ubuntu в Windows дозволяє виконувати вхідні двійкові файли Linux ELF64 у Windows через підсистему Windows для Linux (WSL). Хоча багато людей були шоковані анонсом Bash on Ubuntu, варто згадати, що це відкриває нові двері для сумісності між різними операційними системами. Microsoft робить ще один крок вперед і розкриває, як працює її WSL, щоб ми могли краще зрозуміти, як дві системи взаємодіють між собою.
WSL був створений командою ядра Microsoft Windows і містить як користувацький режим, так і компоненти режиму ядра. Більш конкретно, система складається з:
- послуга менеджера сеансів режиму користувача, яка обробляє життєвий цикл екземпляра Linux
- Драйвери провайдера Pico (lxss.sys, lxcore.sys), роль яких полягає в емуляції ядра Linux шляхом перекладу системних викликів Linux
- Процеси Pico розміщують немодифікований режим користувача Linux (наприклад, / bin / bash).
Зв'язок між трьома компонентами описується наступним чином:
Це простір між бінарними файлами Linux в режимі користувача та компонентами ядра Windows, де відбувається магія. Розміщуючи немодифіковані двійкові файли Linux у процесах Pico, ми дозволяємо спрямовувати системні виклики Linux у ядро Windows. Драйвери lxss.sys та lxcore.sys перекладають системні виклики Linux в NT API і емулюють ядро Linux.
Основна проблема в процесі полягає в тому, щоб дві системи працювали разом:
WSL виконує немодифіковані двійкові файли Linux ELF64, віртуалізуючи інтерфейс ядра Linux поверх ядра Windows NT. Одним із інтерфейсів ядра, яке воно виставляє, є системні виклики (syscalls). Системний виклик - це послуга, що надається ядром і яку можна викликати з користувацького режиму. Як ядро Linux, так і ядро Windows NT виставляють кілька сотень системних викликів у користувацький режим, але вони мають різну семантику і, як правило, безпосередньо не сумісні. Наприклад, ядро Linux включає такі речі, як fork, open і kill, тоді як ядро Windows NT має порівнянні NtCreateProcess, NtOpenFile та NtTerminateProcess.
Підсистема Windows для Linux включає драйвери режиму ядра (lxss.sys та lxcore.sys), які відповідають за обробку запитів системних викликів Linux у координації з ядром Windows NT. Драйвери не містять коду з ядра Linux, але є натомість реалізацією інтерфейсів ядра, сумісних з Linux. У рідному Linux, коли syscall створюється з виконуваного файлу в режимі користувача, він обробляється ядром Linux. У WSL, коли syscall робиться з того самого виконуваного файлу, ядро Windows NT пересилає запит до lxcore.sys. Там, де це можливо, lxcore.sys переводить системний виклик Linux на еквівалентний виклик Windows NT, який, у свою чергу, робить важкі дії.
Беручи до уваги інтерес Microsoft до платформ з відкритим кодом, багато людей задавались питанням технічний гігант повинен придбати такі великі компанії, орієнтовані на Linux, як Canonical, компанія, яка стоїть за операційною системою Ubuntu. Хоча Microsoft і Canonical співпрацювали над програмним забезпеченням з відкритим кодом, жодна з них не коментувала цю можливість.
Якщо вам цікаво, як розвивається взаємодія Linux - Windows, перейдіть до блогу Microsoft. Команда пообіцяла, що після цього з’явиться більше публікацій у цій темі.
ПОВ'ЯЗАНІ ІСТОРІЇ, ЯКІ ВАМ ПОТРІБНО ПЕРЕВІРИТИ:
- Користувачі Linux повідомляють про проблеми “Навушники перестали працювати в Windows 8.1”
- Microsoft та Canonical приносять Bash до Windows 10 на Build 2016
- Мюнхен розпочинає розповсюдження безкоштовних компакт-дисків Ubuntu для користувачів Windows XP