Hackaday Europe 2026: Проста розробка Bare Metal

Коли ми говоримо про програмування в режимі «bare metal» (безпосередньо на апаратному забезпеченні), це означає написання програмного коду, який працює безпосередньо на обладнанні, без операційної системи чи рівнів абстракції. Це дає програмі найпряміший доступ до периферійних пристроїв та пам’яті, але ціною відсутності захисту та додаткових функцій, які надає ОС.

Sylvain Huet приїхав на Hackaday Europe 2026, щоб розповісти про те, як зробити роботу з bare metal легкою. Не лише шляхом ігнорування операційних систем та постійно зростаючих залежностей, але й шляхом переосмислення підходів до розробки програмного забезпечення та створення прозорої платформи з нуля.

З самого початку

Sylvain починає свою доповідь з огляду власного шляху в обчислювальній техніці. Ще у 1982 році він отримав у руки Thomson TO7 з лише 8 кілобайтами оперативної пам’яті користувача та процесором 6809. Найкращим способом отримати задоволення від роботи з апаратним забезпеченням було програмування безпосередньо на асемблері. «Було легко зрозуміти все про свій комп’ютер», — зазначає Sylvain про простоту платформи. «У цьому комп’ютері майже не було прихованих сторін». Звичайно, епоха швидко змінювалася, і трохи більше ніж через десятиліття Sylvain працював над продуктом, схожим на Metaverse, під назвою Second World, а потім, на початку 2000-х, над Nabaztag — чарівним кроликом з Wi-Fi, запущеним якраз тоді, коли бездротові мережі стали мейнстрімом.

Комп'ютерний шлях Sylvain розпочався з Thompson T07, в епоху, коли межа між операційними системами та bare metal була надзвичайно тонкою. Відтоді ми занурюємо наші процесори все глибше в шари абстракції.
Комп’ютерний шлях Sylvain розпочався з Thompson T07, в епоху, коли межа між операційними системами та bare metal була надзвичайно тонкою. Відтоді ми занурюємо наші процесори все глибше в шари абстракції.

Наскрізною темою всіх цих проєктів було те, що значна частина роботи виконувалася на рівні bare metal — це часто корисно, коли потрібно працювати якомога ближче до периферійних пристроїв або максимізувати продуктивність. Потім Sylvain протиставляє це тому, як часто все робиться в сучасну епоху.

Яскравим прикладом стала демонстрація фотографій з аеропорту під час збою CrowdStrike у 2024 році. Там, де колись розклад рейсів міг відображатися на спеціально розробленому пристрої, що працює на дуже простому обладнанні, сьогодні часто просто встановлюють плоскі екрани з повноцінними комп’ютерами Windows позаду них. Це зручний спосіб створення, але, як пояснює Sylvain, така складність іноді має свою ціну.

Далі він показує, що такий дисплей можна дуже легко створити за допомогою Raspberry Pi, що працює під управлінням програми bare metal без операційної системи — без автоматичних оновлень безпеки, що нав’язуються зовнішнім постачальником ОС, або будь-якого такого жорсткого управління. Оскільки він написаний з нуля для виконання одного завдання, програмне забезпечення з меншою ймовірністю вийде з ладу через якесь зовнішнє оновлення або крах невідомої залежності, про яку команда розробників навіть не знала.

Сучасна операційна система, можливо, є найбільшою «чорною скринькою». Її усунення дає набагато більше прозорості щодо того, що відбувається «під капотом». Такою є мета загального проєкту Sylvain Minimacy.
Сучасна операційна система, можливо, є найбільшою «чорною скринькою». Її усунення дає набагато більше прозорості щодо того, що відбувається «під капотом». Такою є мета загального проєкту Sylvain Minimacy.

Sylvain говорить про «новий мінімалізм», де «все, що вам потрібно зрозуміти, має вміщатися у вашому єдиному мозку». Йдеться не лише про роботу на рівні bare metal, а й про створення систем, де один розробник насправді розуміє проєкт від початку до кінця. Звичайно, існують межі розміру проєкту, який будь-яка людина може повністю зрозуміти, але для деяких застосувань це може бути корисним керівним принципом. Доповідь також досліджує, як ми використовуємо зовнішні бібліотеки. Sylvain називає це «парадоксом низького рівня» — коли чим складнішим є завдання, тим більше ми покладаємося на «чорні скриньки» для виконання його частин. Це швидкий спосіб розробки, але він швидко додає тисячі рядків коду до проєкту і дозволяє нам уникати розуміння того, що насправді відбувається «під капотом».

З цією метою Sylvain створив мову Minimacy. Вона призначена для розробки з меншою кількістю залежностей, «чорних скриньок» та операційних систем, максимізуючи при цьому здатність до розуміння. Вона лаконічна, лінійна та безпечна, з суворою статичною перевіркою типів та виведенням типів. Ви можете працювати з нею за допомогою віртуальної машини Minimacy, яка поєднує в собі миттєвий компілятор та віртуальний процесор, що може виконувати код. Вона на 100% з відкритим кодом і написана менш ніж на 900 КБ коду на C — обидва ці аспекти підтримують ідею перебування в межах здатності розробника зрозуміти весь стек. Дійсно, Sylvain демонструє, наскільки вона легка, запускаючи гру Minimacy з дискети на сучасному ноутбуці з UEFI. Ідея полягає в тому, що віртуальна машина Minimacy може працювати на різному обладнанні, забезпечуючи майже bare metal доступ для коду Minimacy, зберігаючи при цьому певний рівень портативності між системами.

Minimacy Machine Sylvain призначена бути платформою з акцентом на прозорість, що дозволяє розробнику знати, що відбувається на кожному рівні. Вона базується на Raspberry Pi RP2350.
Minimacy Machine Sylvain призначена бути платформою з акцентом на прозорість, що дозволяє розробнику знати, що відбувається на кожному рівні. Вона базується на Raspberry Pi RP2350.

Sylvain також демонструє Minimacy Machine. Вона працює на Raspberry Pi RP2350 з частотою 150 МГц, має багато корисних периферійних пристроїв, включаючи Ethernet-з’єднання, OLED-дисплей, зчитувач SD-карт і годинник реального часу. Маючи все це, це платформа, яка може запускати код Minimacy та дозволяти розробку пристроїв, що працюють без залежності від великої кількості зовнішніх залежностей або важкої ОС, розробленої для більш загальних завдань. Вона існує як прозорий програмно-апаратний стек для розробників.

Загалом, доповідь Sylvain — це не просто про Minimacy чи програмування в режимі bare metal. Це про пошук простоти там, де це доцільно. Робота в режимі bare metal, звісно, не підходить для всього, і переважна більшість з нас продовжуватиме використовувати операційні системи для всіляких застосувань, де вони необхідні та корисні. Однак, у наш розвинений вік, іноді корисно пам’ятати, що усунення непотрібних шарів абстракції часто має великий сенс, оскільки вони можуть відволікати нас від простих завдань, яких ми намагаємося досягти.

David каже:
15 вересня 2026 о 11:08 ранку
Отже, це віртуальна машина з певною метою. Подумайте про Zork machine, мінус специфічні для гри елементи, плюс елементи для віртуалізації загального обладнання, плюс це призначено для запуску на bare metal.

Відповідь

  1. drenehtsral каже:16 вересня 2026 о 8:38 ранку

    Так, здається, це так. Я скептично ставлюся до того, чи така віртуальна машина (навіть на bare metal) колись наблизиться до нативного коду на bare metal за продуктивністю. Було б цікаво, якби вона створювала нативні бінарні файли, але з віртуальною машиною це виглядає як оновлення для 2020-х років UCSD pSystem =:-/

    Відповідь

  • brian каже:15 вересня 2026 о 11:23 ранку

    Філософія та логіка «мінімалізму» чудові; ні, вони неймовірні. Все звучить чудово, доки ви не прочитаєте документацію і не побачите використання ще однієї програмної мови, специфічної для додатків.

    Я припускаю, що цього можна було б уникнути, і використовувати це зі стандартним ANSI C/асемблером та малопотужним пристроєм. О, зачекайте, я роблю це зі шматками, такими як TI 430 або Atmel 2313 з кількома добре документованими допоміжними мікросхемами, але лише нещодавно, приблизно за останні 30 років.

    Вибачте за сарказм, але це я просто здаюся у свої останні роки.

    Відповідь

  • HERATH M W I HERATH каже:15 вересня 2026 о 1:17 дня

    Я мріяв позбутися всіх компіляторів, абстракцій, бібліотек тощо, крім nasm, і завантажитися в ОС, написану на асемблері. Потім користувач програмує її, використовуючи простий англійський. Це bare metal, гадаю. Дякую за вашу пристрасть і цю статтю. Чи моя ОС, про яку я говорю, занадто хороша, щоб бути правдою? Перевірте її на https://github.com/IndyWH/germos

    Відповідь

    1. Iman каже:16 вересня 2026 о 5:23 ранку

      Цікавий підхід. Мені цікаво, куди він приведе. Продовжуйте спілкуватися.

      Відповідь

      1. DR HERATH HERATH каже:17 вересня 2026 о 3:24 дня

        Дякую, Iman! Оновлення: два дні потому, минулої ночі він завантажився на реальному обладнанні, старому HP Compaq Elite 8300 з 2012 року. Весь образ завантаження становить 36 864 байти (ISO Ubuntu на тому ж USB-накопичувачі — 6,5 ГБ), і він переходить від передачі керування від прошивки до запрошення за 0,64 секунди, виміряно за послідовною лінією. Фотографія тепер у верхній частині README. Мережева карта — останнє, що ще опирається.

        Відповідь

        1. DR HERATH HERATH каже:18 вересня 2026 о 2:38 ранку

          Мережева карта вирішена. Ми написали коротку історію про те, як це було зроблено. Ви можете прочитати її в README репозиторію -> The metal, 17 і 18 вересня 2026 — Стадія 7 закрита 18 вересня 2026 (https://github.com/IndyWH/germos). Найбільше задоволення на кілобайт справді!

          Відповідь

  • Nick каже:15 вересня 2026 о 1:23 дня

    Коли хтось обговорює новий програмний проєкт/підхід, і його презентація або плакат містять ці «сучасні» кліпарти, ніби вирвані з інтерфейсу Android-додатку, мої чутливі сенсори починають тремтіти… ні, ні, вони прямо говорять мені «валити звідси», бо це пастка.

    24 роки досвіду в розробці вбудованих систем (з яких 17 років — в автомобільній промисловості) роблять таке з чоловіком.

    Відповідь

  • Greg A каже:15 вересня 2026 о 2:02 дня

    Я, мабуть, радий, що сьогодні існує така різноманітність інструментів, але цей здається мені суперечливим.

    Я ненавиджу надмірно складні системи… Я багато разів боровся, щоб знайти 10-100 рядків логіки, похованих під тисячами або мільйонами рядків обгорток / стандартного коду / структури / зайвих функцій. Я написав свій власний асемблер для pic18, свій власний «компілятор» для stm32, і свій власний C-рантайм / завантажувач для rp2040. І в моєму списку справ — створення власного USB-стека «з нуля» для rp2040, але зараз це низький пріоритет.

    Наприклад, мене зводить з розуму, що коли я відлагоджував marlin (прошивку для 3D-принтерів), одним з моментів, з яким я зіткнувся, була різниця в поведінці між AVR SDK, встановленим Debian apt, і AVR SDK Arduino, який використовують інші. Я вважаю Marlin «bare metal», чому я в пеклі залежностей? З іншого боку, використання всіх цих рівнів абстракції дозволило Marlin залишатися актуальним на багатьох різних платах / чіпах!

    Отже, останнє, що я хочу, це маленька нішева ОС, яка надає безліч функцій, таких як мережа. Моє бажання дістатися до «заліза» суперечить моєму бажанню мати готовий мережевий стек, і як розробник / менеджер проєкту, я повинен вирішити, яка сторона переможе. Вони не можуть обидва перемогти!

    Багато разів у таких проєктах я винаходжую специфічну для домену мову… але я не хочу вивчати чиюсь чужу! Це зневажає всю мету тримати всю проблему в голові.

    Відповідь

    1. syc4p3cM каже:15 вересня 2026 о 2:14 дня

      наприклад, мене зводить з розуму, що коли я відлагоджував marlin (прошивку для 3D-принтерів), одним з моментів, з яким я зіткнувся, була різниця в поведінці між AVR SDK, встановленим Debian apt, і AVR SDK Arduino, який використовують інші. Я вважаю Marlin «bare metal», чому я в пеклі залежностей?

      Не використовуйте Debian, якщо ви не любите займатися археологією IT у стилі Larecroft.

      Відповідь

      1. Greg A каже:16 вересня 2026 о 8:34 ранку

        Ех, є справжні виклики, але в цьому випадку AVR SDK Debian був правильним (відповідав стандарту), а Arduino — неправильним (не відповідав стандарту), і розробники Marlin були введені в оману недоліками Arduino SDK.

        Я маю на увазі, пакети Debian часто відображають погані вибори (systemd), але загалом я б волів використовувати майже все, крім Arduino 🙂 насправді, багато моїх звичок програмування «bare metal» походять від реакційного відразу до Arduino SDK.

        (Не кажу, що Arduino не має свого застосування… просто говорю про свої смаки)

        Відповідь

  • Nik каже:15 вересня 2026 о 3:29 дня

    Ну, друзі мої, у мене є запитання до вас:

    Якщо ми використовуємо HAL (Hardware Abstraction Layers) для розробки на наших улюблених MCU, чи це все ще розробка bare metal, чи ні? А що, якщо нам доведеться використовувати RTOS?

    Відповідь

    1. zamorano каже:16 вересня 2026 о 2:42 ранку

      Правда… Думаю, це залежить від того, що мається на увазі під «bare metal»: ви чи ваша програма спілкуєтеся безпосередньо з обладнанням?

      Відповідь

    2. Greg A каже:16 вересня 2026 о 8:36 ранку

      Я навіть не розумію, чому існує такий соціальний тиск описувати речі як «bare metal», якими вони не є. Немає нічого поганого у використанні HAL / RTOS / малого ядра / тощо. Чому б людям просто не описувати те, що вони роблять, словами, які відповідають тому, що вони роблять? Чому так небажано відкидати фразу «bare metal», коли ви використовуєте абстракції?

      Абстракції — це змішаний мішок, але немає сумнівів, що багато моїх прихильностей до bare metal є дисфункціональними, хворобою, яку я маю. Чому люди вдають, що мають мою хворобу, якщо вони її не мають?

      Відповідь

  • Nik каже:15 вересня 2026 о 3:36 дня

    До речі, 900 КБ коду на C — це досить багато, чому ви вважаєте, що це мало?

    Відповідь

    1. BrightBlueJim каже:15 вересня 2026 о 11:55 вечора

      Тому що це включає високорівневу мову, яку він написав, що дозволяє йому програмувати НА цьому пристрої ДЛЯ цього пристрою, замість того, щоб перепрошивати з Arduino IDE або іншого інструментарію, який потребує великого комп’ютера для роботи. І це 900 КБ вихідного коду — він каже, що це близько 500 КБ бінарного файлу. І це включає деякі бібліотеки, які він згадує.

      Відповідь

  • Johan каже:15 вересня 2026 о 5:06 дня

    Чому всі, хто каже «давайте наблизимося до заліза», завжди одразу додають «ось нова мова програмування»?

    Якщо ви хочете бути на «залізі», кодуйте на асемблері. Якщо ви не хочете займатися власним керуванням змінними або пам’яттю, кодуйте на чомусь вищому рівні. Ви не можете працювати в режимі bare-metal І не турбуватися про керування пам’яттю та змінними. Я думаю, на сьогодні кількість мов програмування повинна наближатися до кількості зірок у нашій галактиці… кожна з них робить (або претендує на те, що робить) точно те саме, що й усі попередні. Мікропроцесори працюють за одними й тими ж основними принципами вже понад пів століття… нова мова не змінить спосіб їх роботи.

    Щодо мов вищого рівня, C існує вже десятиліттями. Очевидно, що вона дуже ефективна, інакше її б давно відкинули…

    Відповідь

    1. BrightBlueJim каже:15 вересня 2026 о 11:37 вечора

      Уявіть собі його позицію: він хоче мати можливість писати код на своїй мінімальній системі, що майже виключає C. І він хоче мати можливість портувати його на різні машини та запускати свій код на будь-якій з них. Що означає, що йому потрібен інтерпретатор. Мені здається, це той самий підхід, який використовували всі «домашні комп’ютери» наприкінці 1970-х — 80-х: написати ОС, яка, по суті, є BASIC-інтерпретатором з кількома доданими ключовими словами (peek і poke, наприклад), що дають доступ до апаратного забезпечення, і можливість завантажувати функції машинного коду. Але його нова мова програмування більше схожа на C або Pascal, ніж на BASIC, тому я не думаю, що було поганою ідеєю написати ПРОСТУ мову, яка подобається йому, і яка відповідає його способу розробки коду. І не кажіть «Micro Python», тому що він ледь вміщається на Pi Pico, і НЕ вміщається на багатьох платформах, на яких він може захотіти це використовувати. Я перебуваю в схожій ситуації і розглядав можливість написання скороченого C-інтерпретатора з цієї причини.

      Відповідь

      1. Johan каже:16 вересня 2026 о 1:18 ранку

        …так, і оскільки ваша нова маленька мова має унікальність (наприклад, власні «peek» та «poke»), вона спочатку не є портативною на інші платформи… якщо ви спочатку не сядете і не напишете подібні інтерпретатори для всіх них. Ви нічого не спрощуєте, додаючи нову мову. Якщо ви хочете працювати в режимі bare-metal, просто використовуйте асемблер і портуйте асемблер на інші платформи (що в будь-якому випадку матимуть надзвичайно різні вимоги до керування пам’яттю). Єдиний спосіб зробити портабельність незалежною від платформи — це мати ОС… щось, що майже неможливо на більшості MCU. Коли вам доводиться жити близько до заліза з міркувань продуктивності, це, на жаль, те, що вам доведеться прийняти.

        Micro Python?

        Не хвилюйтеся… є особливе місце за дверима моєї ванної кімнати для всього, що пов’язано з Python…

        Відповідь

        1. Iman каже:16 вересня 2026 о 5:17 ранку

          «ОС… щось, що майже неможливо на більшості MCU».
          ZephyrOS і FreeRTOS, назвемо дві, працюють відповідно на STM32L0 і ATMEGA32U4. Більшість MCU сьогодні потужніші за це. Існують навіть дуже базові ОС для ще слабших MCU.

          Відповідь

  • BrightBlueJim каже:15 вересня 2026 о 11:48 вечора

    Я не впевнений, чому він так негативно ставиться до бездротового зв’язку. Я можу погодитися з ним, що Raspberry Pi Linux SBC настільки заповнені програмними блоками, що ви не знаєте, що вони роблять за вашою спиною, але є інша альтернатива, яку я бачив кілька разів: включити ESP32-C3 або -C5 як пристрій для мережі та Bluetooth, і мати цей чіп, що живиться через MOSFET, який ви вмикаєте лише тоді, коли збираєтеся використовувати Wi-Fi або Bluetooth. Їх легко інтегрувати, тому ви можете ставитися до них як до «чорних скриньок», і вам не доведеться вміщувати їхню внутрішню роботу у свою обмежену голову, якщо ви цього не захочете. Що він, власне, робить для Ethernet — використовує окремий MCU, який просто керує мережевим стеком і підключається до основного MCU через SPI, я припускаю, використовуючи PPPoE.

    Відповідь

    1. Johan каже:16 вересня 2026 о 1:29 ранку

      Як людина, яка пережила Ethernet від його зародження до сьогодні, я мушу погодитися. Починати роботу з мережевим стеком — це не для слабкодухих. Навіть якщо ви вирішите переробити «колесо» з нуля, ви не матимете стабільного стека роками (навчання).

      Щодо ESP32… назва зараз не пригадується, але є проєкт на GitHub, який реверсує бездротовий зв’язок ESP32 і надає заголовочні файли. Це для тих, хто хоче створювати власні мережеві стеки.

      Я також не шанувальник пропрієтарних блоків у «своїх речах»…

      Відповідь

  • garlicbready каже:16 вересня 2026 о 7:46 ранку

    Не намагаючись звучати як культист Rust, я думаю, що Rust має певні переваги для вбудованих плат bare metal. Не щодо безпеки пам’яті, а натомість щодо трейтів, системи збирання (cargo) та простору імен, що робить речі набагато більш модульными та «plug and play».

    Спочатку ви можете визначити стандартний інтерфейс / трейт для чогось на кшталт інтерфейсу i2c або spi в бібліотеці (що вже зроблено).
    Потім ви визначаєте щось специфічне для платформи (наприклад, для esp32 або rp2040), яке використовує той самий трейт, але надає шину, до якої можна підключитися.
    Тоді ви маєте те, що ви написали (драйвер або інше), що підключається до шини за допомогою трейту, тобто воно може працювати на різних платформах, використовуючи попередньо визначений стандарт.

    Завантаження, збирання та компонування всього вищезазначеного — це лише кілька рядків у файлі конфігурації cargo (з, можливо, кількома невеликими налаштуваннями для специфічних для платформи елементів). Отже, збирання також набагато простіше.

    Щоб уникнути речей, пов’язаних з MMU, таких як вектори тощо, ви можете використовувати функцію «nostd», тому, якщо ваша бібліотека сумісна з nostd, вона може працювати на мікроконтролерах без MMU.
    Це робить встановлення бібліотек, таких як «nut-shell» для cli-оболонки або ratatui, надзвичайно простим на bare metal.

    Недоліки — це те, для якого процесора підтримує компілятор, і робота з borrow checker.

    Відповідь

  • El Gru каже:16 вересня 2026 о 4:09 дня

    Я не згоден з його визначенням bare metal, тому що, якщо я правильно зрозумів частини, які я дивився ¹, він, по суті, запускає віртуальну машину, як Java. Скільки рівнів абстракції нижче — не має значення. З того моменту, як ваша програма не прив’язана до певної архітектури, ви більше не працюєте в режимі bare metal. Контейнери, такі як Docker, більш «bare metal», ніж будь-яка мова віртуальних машин.

    Однак я повністю згоден з його прагненням зменшити залежності для довгострокової стабільності, простої розробки та загального зменшення розумового навантаження.

    ¹) якість звуку плюс його акцент майже незрозумілі мені

    Відповідь

  • Залишити відповідьСкасувати відповідь

    Будьте ввічливі та поважайте інших, щоб розділ коментарів був чудовим. (Політика коментування)

    Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються дані ваших коментарів.

    Пошук

    Ніколи не пропустій жодного хаку

    Підписатися

    • Hackaday Europe 2026: Проста розробка Bare Metal 1

      Правила FCC ISM можуть зруйнувати спільноти Lora Mesh

      70 коментарів

    • Hackaday Europe 2026: Проста розробка Bare Metal 2

      Теплові куполи: зустрiчiть тиху та гнітючу версію Thunderdome

      38 коментарів

    • Hackaday Europe 2026: Проста розробка Bare Metal 3

      Рожевий ретрокомп’ютинг

      26 коментарів

    • Hackaday Europe 2026: Проста розробка Bare Metal 4

      Технології на видноті: познайомтеся з роботом, який робить ШВЛ

      24 коментарі

    • Hackaday Europe 2026: Проста розробка Bare Metal 5

      Полювання на дикого Vibrotruck

      46 коментарів

    Більше з цієї категорії

    Наші колонки

    • Hackaday Europe 2026: Проста розробка Bare Metal 6

      Hackaday Podcast Епізод 387: Надлюдські годинники, CAN в USB-C та радощі bare metal

      Без коментарів

    • Hackaday Europe 2026: Проста розробка Bare Metal 7

      Цього тижня в безпеці: камери Flock застаріли, Microsoft виправляє патчі, а дослідники атакують SSH

      2 коментарі

    • Hackaday Europe 2026: Проста розробка Bare Metal 8

      FLOSS Weekly Епізод 882 з OSADL: краще разом

      Без коментарів

    • Hackaday Europe 2026: Проста розробка Bare Metal 9

      Linux Fu: Говори голосніше!

      22 коментарі

    • Hackaday Europe 2026: Проста розробка Bare Metal 10

      Hackaday Europe 2026: Космічні дивацтва

      2 коментарі

    Більше з цієї категорії

    Залишити відповідь

    Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *