Підтримка Rust для ядра Linux зіткнулася з критикою Торвальдса

Лінус Торвальдс провів рецензування патчів з реалізацією можливості створення драйверів мовою Rust для ядра Linux і висловив деякі критичні зауваження.

Найбільші претензії викликала потенційна можливість відходу в panic() у помилкових ситуаціях, наприклад, у ситуації нестачі пам'яті, коли операції динамічного розподілу пам'яті, зокрема й усередині ядра, можуть завершитися помилкою. Торвальдс заявив, що подібний підхід у ядрі принципово неприпустимий і за нерозуміння цього моменту він може повністю відвернути (totally NAKed) будь-який код, який спробує використати подібний підхід. З іншого боку, розробник, який займається патчами, погодився з цією проблемою і вважає її вирішуваною.

Ще однією проблемою стали спроби використання обчислень з плаваючою комою або 128-бітними типами, що не є допустимим для оточення, як ядро ​​Linux. Це виявилося серйознішою проблемою, тому що в даний момент базова (core) бібліотека Rust неподільна і являє собою один великий blob - в ній немає можливості запросити тільки деякі з можливостей, запобігши використанню тієї чи іншої проблемної функціональності. Вирішення проблеми може вимагати внесення змін у компіляторі rust та бібліотеки, при тому, що на даний момент команда ще не має стратегії, як реалізувати модульність бібліотек мови.

Крім того Торвальдс зазначив, що наданий приклад драйвера — марний і порадив додати як приклад якийсь драйвер, який вирішує одне з реальних завдань.

Додаток: Компанія Google заявила про свою участь в ініціативі щодо просування підтримки Rust в ядро ​​Linux і навела технічні аспекти доцільності впровадження Rust для боротьби з проблемами, які виникають через помилки під час роботи з пам'яттю. Google вважає, що Rust вже готовий приєднатися до Сі як мова для розробки компонентів ядра Linux. У статті також наведено приклади використання мови Rust для розробки драйверів ядра, в контексті їх використання у платформі Android (Rust визнаний офіційно підтримуваною мовою для розробки Android).

Зазначається, що Google підготував початковий прототип написаного мовою Rust драйвера для механізму міжпроцесної взаємодії Binder, який дозволить провести детальне порівняння продуктивності та безпеки реалізацій Binder на Сі та Rust. У поточному вигляді робота ще не завершена, але вже майже для всіх базових абстракцій функціональності ядра, необхідних для роботи Binder, підготовлені прошарки для використання цих абстракцій у коді Rust.

Джерело: opennet.ru

Додати коментар або відгук