Обычная стиральная машина, телевизор, камера наблюдения или автомобиль сегодня часто оказываются полноценными Linux-системами с процессором, памятью и сетью. Я разобрал несколько таких устройств и попытался понять, почему разработчики всё чаще прячут внутри бытовой техники полноценную операционную систему.

Когда я впервые подключился по UART к обычному бытовому устройству, я ожидал увидеть примитивную прошивку на микроконтроллере. Но вместо этого на экране терминала внезапно появились строки загрузки Linux. С тех пор у меня появилась странная привычка: если какое-то устройство попадает ко мне в руки, я почти автоматически ищу на плате UART, JTAG или хотя бы тестовые пины.

И знаете что? Linux внутри оказывается намного чаще, чем можно ожидать.

За последние пару лет я разобрал и исследовал довольно много устройств: от стиральных машин до телевизоров и сетевых камер. И каждый раз удивлялся тому, насколько мощные системы скрываются внутри обычных вещей.

Попробую рассказать о десяти устройствах, внутри которых неожиданно работает Linux. Возможно, после этой статьи вы тоже начнёте подозрительно смотреть на свою бытовую технику.

Когда стиральная машина оказывается полноценным компьютером

История началась довольно банально. У меня дома стала странно зависать стиральная машина. Иногда она просто останавливалась посреди цикла и не реагировала на кнопки.

Первая мысль была стандартная — контроллер умер.

Но когда я снял заднюю крышку, на плате обнаружилась довольно интересная картина:

  • SoC от MediaTek

  • NAND-flash

  • 256 МБ RAM

  • Wi-Fi модуль

Честно говоря, я ожидал увидеть обычный микроконтроллер уровня STM32.

Дальше стало ещё интереснее. На плате были четыре тестовые точки. Подключил логический анализатор — и там оказался UART.

После подключения USB-UART адаптера в терминале появилась загрузка:

U-Boot 2017.09 (Oct 12 2021)

CPU: ARM Cortex-A7
DRAM: 256 MB
NAND: 128 MiB
Loading kernel...

Booting Linux on physical CPU 0x0
Linux version 4.4.35

Вот в этот момент я реально завис.

Стиральная машина.
ARM-процессор.
Linux.

Зачем вообще Linux в стиральной машине?

Если немного подумать — становится понятно. Там есть:

  • сеть

  • сенсорный интерфейс

  • обновление прошивки

  • куча датчиков

То есть это почти полноценная embedded-система.

Самое смешное — внутри оказался BusyBox и даже SSH-сервер.

Я попробовал подключиться.

ssh root@192.168.1.78

И да, я получил shell стиральной машины.

В этот момент возникает странное чувство. Ты понимаешь, что перед тобой обычный бытовой прибор… но внутри него полноценная операционная система.

Телевизор — это почти обычный сервер

С телевизорами ситуация ещё интереснее.

Большинство современных Smart TV работают на Linux.

Причём архитектура там довольно мощная:

  • ARM Cortex A53

  • 1–2 GB RAM

  • GPU

  • аппаратный декодер видео

Фактически это маленький медиасервер.

Когда я исследовал прошивку одного телевизора, внутри оказалась вполне привычная структура:

/bin
/etc
/usr
/var
/lib

А процессы выглядели так:

root       125  0.0  0.1  11000  2100 ?        Ss   init
root       210  0.2  0.3  28000  4100 ?        S    networkd
root       311  0.4  0.7  45000  8200 ?        S    media-server
root       512  1.1  2.0  90000 18000 ?        S    browser

По сути телевизор — это браузер на Linux, который умеет воспроизводить видео.

Иногда там можно найти даже довольно неожиданные вещи.

Например:

  • SQLite базы

  • Python скрипты

  • NodeJS

Да, телевизор может запускать JavaScript.

Домашний роутер — самый известный скрытый Linux

Это уже более известный факт, но всё равно многие пользователи не осознают, что их роутер — это Linux-компьютер.

OpenWRT и другие системы давно доказали, что роутер можно превратить в полноценный сервер.

Внутри типичного домашнего роутера:

  • CPU MIPS или ARM

  • 64–256 MB RAM

  • flash память

  • Ethernet switch

Но самое интересное — это возможности.

Я однажды запускал на роутере небольшой сервис мониторинга.

Вот пример минимального HTTP-сервера на Python, который спокойно работал на OpenWRT.

# Python

from http.server import BaseHTTPRequestHandler, HTTPServer
import os
import time

class StatusHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        uptime = os.popen("uptime").read()

        self.send_response(200)
        self.send_header("Content-type", "text/plain")
        self.end_headers()

        self.wfile.write(b"Router status\n")
        self.wfile.write(uptime.encode())

def run():
    server = HTTPServer(('0.0.0.0', 8080), StatusHandler)
    print("Server started on port 8080")
    server.serve_forever()

run()

После запуска можно было открыть:

http://router-ip:8080

И увидеть состояние системы.

Не самый практичный проект, но сам факт, что роутер спокойно крутит Python — уже говорит о многом.

IP-камеры — кладбище уязвимостей

Если есть категория устройств, где Linux встречается почти всегда — это IP-камеры.

Типичная архитектура камеры:

  • ARM SoC

  • Linux kernel

  • RTSP сервер

  • web интерфейс

Внутри часто можно найти BusyBox и небольшой веб-сервер.

Иногда конфигурации лежат прямо в текстовом виде.

Вот пример куска конфигурации RTSP-сервера:

rtsp_port=554
stream1=/dev/video0
bitrate=4096
resolution=1920x1080
fps=25

Но интереснее другое.

Очень часто там остаются сервисные скрипты.

Например такой.

#!/bin/sh
# Bash

echo "Starting camera services"

ifconfig eth0 up
udhcpc -i eth0

rtspd &
motiond &

echo "Camera ready"

Иногда такие вещи остаются прямо в production-прошивках.

И вот тут начинаются приключения для специалистов по безопасности.

Автомобили тоже давно перешли на Linux

Современные автомобили — это вообще отдельная история.

Многие системы infotainment работают на Linux.

Например:

  • Android Automotive

  • QNX-Linux гибриды

  • кастомные Linux-дистрибутивы

Внутри автомобиля можно найти несколько компьютеров:

  • медиасистема

  • навигация

  • телематика

  • обновление прошивки

Одна из самых интересных вещей — система обновлений.

Вот упрощённая логика OTA-обновления.

// C++

#include <iostream>
#include <fstream>
#include <string>

bool verifyFirmware(const std::string& path)
{
    std::ifstream file(path);

    if(!file.is_open())
        return false;

    // проверка подписи (условно)
    std::string signature;
    file >> signature;

    if(signature == "VALID_SIGNATURE")
        return true;

    return false;
}

void updateFirmware()
{
    std::string firmware = "/tmp/update.bin";

    if(verifyFirmware(firmware))
    {
        std::cout << "Firmware verified\n";
        system("flash_update /tmp/update.bin");
    }
    else
    {
        std::cout << "Firmware verification failed\n";
    }
}

int main()
{
    updateFirmware();
}

Разумеется, в реальности всё намного сложнее.

Но общая идея примерно такая.

Неожиданный вывод

Если немного оглянуться вокруг, становится ясно, что Linux уже давно вышел за пределы серверов и ноутбуков.

Он внутри:

  • стиральных машин

  • телевизоров

  • роутеров

  • камер

  • автомобилей

  • умных колонок

  • NAS-хранилищ

  • систем умного дома

И самое забавное — большинство пользователей даже не подозревают, что их бытовая техника на самом деле работ��ет на той же системе, что и огромные дата-центры.

Иногда я думаю: сколько ещё устройств вокруг нас quietly booting Linux прямо сейчас?

Если честно, после всех этих экспериментов у меня появилась немного странная привычка.

Когда я беру в руки любое электронное устройство, первая мысль теперь не про то, как им пользоваться, а про другое: интересно, а внутри там Linux или нет?

Иногда начинаешь смотреть на плату и автоматически ищешь три вещи:

UART
JTAG
или хотя бы тестовые пины

И довольно часто угадываешь.