Как стать автором
Обновить

Комментарии 58

Прикольно, конечно, но монолитное ядро и C++ в 2021?

Модель системы — однопоточная. Чуть позже разработчики собираются добавить поддержку многоядерных процессоров. Сейчас она может работать с ними, но недолго — всего несколько минут.

Воу, плюсовики опять не смогли в многопоточность. Неожиданно, конечно. Ну ничего, пару лет в дебаггере и %feature_name% точно-точно заработает без падений на 8 ядрах.

for (size_t index = 0; index < (((size_t)AHCI::Limits::MaxPorts * 512) / PAGE_SIZE); index++) {
  m_identify_metadata_pages.append(MM.allocate_supervisor_physical_page().release_nonnull());
}

if (kernel_command_line().ahci_reset_mode() == AHCIResetMode::Aggressive) {
  for (auto index : taken_ports.to_vector()) {
    auto port = AHCIPort::create(*this, static_cast<volatile AHCI::PortRegisters&>(controller.hba().port_regs[index]), index);
    m_handled_ports.set(index, port);
    port->reset();
  }
  return;
}

for (auto index : taken_ports.to_vector()) {
  auto port = AHCIPort::create(*this, static_cast<volatile AHCI::PortRegisters&>(controller.hba().port_regs[index]), index);
  m_handled_ports.set(index, port);
  port->initialize_without_reset();
}

Нечитаемо.

PhysicalAddress AHCIPortHandler::get_identify_metadata_physical_region(u32 port_index) const
{
    dbgln_if(AHCI_DEBUG, "AHCI Port Handler: Get identify metadata physical address of port {} - {}", port_index, (port_index * 512) / PAGE_SIZE);
    return m_identify_metadata_pages[(port_index * 512) / PAGE_SIZE].paddr().offset((port_index * 512) % PAGE_SIZE);
}

Индекс всегда вычисляется верно. Я гарантирую это.

// "Unpad" the device name string.
for (u32 i = 93; i > 54 && bbuf[i] == ' '; --i)
  bbuf[i] = 0;

А как вам такое?

Рад за челочека, что он излечился и делом занимается. Но пользы, скорее всего, никакой

Ну так-то С++ живее всех живых и нет причин не писать на нём в том числе и новый проекты, особенно с выходом новых стандартов. Если для вас это не читаемо и у вас аллергия на этот ЯП, пишите на Питоне, или становитесь Растосектантом, вставляющим своё важное мнение в любоё место, даже когда не спрашивают :)

Причина не писать на нём — непознаваемость языка и невозможность не делать ошибки.

Эквивалентную замену предоставите? Все мы конечно в курсе что ядро можно писать на СИ, но в 21м году хотелось бы чтобы компилятор за пользователя что-нибудь все таки делал.

Еще хочется увидеть ЯП на котором невозможно делать ошибки.

Эквивалентную замену предоставите? Все мы конечно в курсе что ядро можно писать на СИ, но в 21м году хотелось бы чтобы компилятор за пользователя что-нибудь все таки делал.

Зависит от ваших констрейнтов. В зависимости от них — от раста через ivory или ats до экстракции из кока.


Еще хочется увидеть ЯП на котором невозможно делать ошибки.

Любой, где можно формально доказывать вещи (то есть, где есть завтипы и консистентная логика). Там ошибки сводятся к ошибкам в спеке уровня «заказчик хотел самолёт, а мы ему сделали пароход». Ну и к модели внешнего мира, конечно.


Впрочем, понятно, что ошибки — это спектр, и скорее будет проблемой найти язык, где допустимы все те классы ошибок, что и в плюсах (от memory safety до внезапно стреляющего UB, вырезающего по-тихому целые функции или вызывающего то, что вы не вызывали).

И на каком из этих языков можно написать ОС не прибегая к СИ ?

А что плохого в написании ядра на Си?

Если не делать монолит и не тащить драйвер мышки в ядро, вполне осиливаемая задача.

Не нравится Си - можно на расте написать.

Rust:
* https://os.phil-opp.com/ -- Туториалы по написанию простенькой ОСи на Rust (+ немного ассемблера, ЕМНИП);
* https://gitlab.redox-os.org/redox-os/redox -- Настоящая ОСь, написанная полностью на Rust.

На Rust точно можно.

Без Си не проблема. Вот без ассемблера/машинного кода вы вряд ли справитесь на большей части архитектур, но это и для Сей ровно так же справедливо

Эквивалентную замену предоставите?
Возможно, что можно придумать ЯП ориентированный именно для написания операционных систем.
Ох, сейчас словлю тонну тухлых помидоров, но как насчет Object Pascal? ООП есть, на основе FPC легко сделать необходимые конфигурации сборки, нужную линковку. Нет UB, все явно.

Я сейчас переписываю свою хоббийную ОС на Pascal, но столкнулся с проблемами из-за нестандартной модели памяти (сегментирование против плоской). В 99% случаев (проектов) этой проблемы нет, сейчас плоская модель повсюду.

не знаю на счёт UB, но вот в Delphi/Pascal можно вызвать чисто чисто виртуальный метод. Т.е. видимо можно создать объект, имеющий не полную реализацию, и словить исключение. Помню не редко их ловил в BSPlayer. В Си++ например так низзя, будет ошибка компиляции.

Эм, так зачем так сложно в ногу стрелять? Просто объявите переменную-объект и работайте с ней, не инстанцировав объект. Там не только один виртуальный метод будет отсутствовать.
Помню не редко их ловил в BSPlayer. В Си++ например так низзя, будет ошибка компиляции.

Delphi выдаст предупреждение на этапе компиляции, а уж собирать проект с предупреждениями — это так себе идея.
[dcc32 Warning] Example.dpr(18): W1020 Constructing instance of 'TExample' containing abstract method 'TExample.SomeMethod'

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

Нечитаемо.

Прикольно, два почти одинаковых цикла. Почему бы не сделать что-то такое, непонятно.


const auto shall_reset = kernel_command_line().ahci_reset_mode() == AHCIResetMode::Aggressive;
for (auto index : taken_ports.to_vector()) {
  auto port = AHCIPort::create(*this, static_cast<volatile AHCI::PortRegisters&>(controller.hba().port_regs[index]), index);
  m_handled_ports.set(index, port);
  if (shall_reset)
    port->reset();
  else
    port->initialize_without_reset();
}
И цикл в любом случае выполняется только один раз, но зато четко разделено поведение в случае агресив и не агресив…

А вы булевых параметров для своих функций тоже избегаете, и пишете два раздельных варианта — один для true, другой для false, даже если они отличаются ровно одной деталью? Ну, чтобы было чётко разделено поведение.


А вот ваш код как раз труднее читать, к сожалению, причем профита в производительности не заметно.

Оно не ради профита в производительности.

Ну на пример потому что в оригинальном коде первое условие еще и функцию завершает.

Я предположил, что после второго цикла там тоже return, просто неявный ввиду закрывающей фигурной скобочки (что имеет смысл из общих соображений). Если там этого неявного return нет, то это ещё больший ад, и функцию надо дробить.

Да там правда два одинаковых цикла, но под разными условиями https://github.com/SerenityOS/serenity/blob/b91df26d4a14c2721d1920e76552012864c97790/Kernel/Storage/AHCIPortHandler.cpp#L34

После второго функция завершается.

Возможно, чел хотел ветвление из цикла убрать, чтобы "добавить скорости"... но в 2021 это так не работает

Современные плюсы вообще имеют плохочитаемый синтаксис. Вероятно, это наложение snake_case стиля и длинных (в т.ч. шаблонных) имен и выражений.

С++ не заставляет вас писать змеёй. Пишите хоть верблюдом - всё скомпилируется.

Код действительно плохой, С++ здесь ни при чем. Автор — не профессиональный программист, если можете лучше — причешите и сделайте pull request.

Но пользы, скорее всего, никакой

Ну, как "никакой"? "Хайпа" срубил, 28K подписчиков на YouTube (немного, конечно, но на пиво и сигареты хватит, AFAIK). Ну, и, самое главное, видимо - "кайф" получает от работы над подобным проектом.

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

Модель системы — однопоточная.

Система не однопоточная.

Видимо, это сюда перекочевало из ошибки автора обзора на Ars Technica. Имелось в виду, что пока поддерживается использование одного ядра процессора. Поддержка SMP есть, но пока работает не очень стабильно.

Традиционный вопрос: что с драйверами? Используются существующие сторонние?

F**k Nvidia :)

"Если есть желание, можно помочь и написать новый браузер с нуля."


:)


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

Тоже ржал в голос с фразы

Текущий настолько слабый, что он пока не может даже воспроизводить видео с YouTube.

Всего-то переписать/перенести вагон декодеров десятка форматов видео, сделать поддержку MPEG-DASH и HLS.

Так я не понял, она на голом-то железе запустится? Или чтобы эту ОС использовать, надо иметь и настоящую?

Прокомментирую увиденное по своему профилю, глядя вот на это:

https://github.com/SerenityOS/serenity/blob/master/Kernel/Graphics/Intel/NativeGraphicsAdapter.cpp

Самопальный графический <<стек>> в виде голого фрейм-буффера есть. Зрелость его по вменяемым меркам собственной графики близка к 0. Для Intel GPU есть поддержка ровно 1 контроллера 2006-2008 года. Драйверная модель статическая, чисто регистровая. Ни прерываний, ни аппаратного курсора, менеджмента памяти, никакого задела даже на 2D акселератор (а он там простейший, строк в 100 кода можно уложиться, если бы был VMEM-менеджмент, но...), масса fixme даже на 645 строк в мастере. Зато есть чтение EDID через GMBUS.

Посоны, видимо, глянули на размеры настоящих драйверов и решили забить в пользу VESA/int10 и UEFI mode-switcher-ов. Одним словом с драйверами вах.

Хорошо, респект авторам. Такие проекты всегда вызывают уважение.
Для современных систем конечно самое главное — браузер, поэтому ждем порта хромиума или файрфокса (и ТорБраузера заодно) :) А одно из возможных применений — «чистая система» (под которую с огромной долей вероятности не будет вирусов и эксплойтов) для выхода в инет из виртуалки — для задач с высокими требованиями к безопасности, типа интернет-банкинга.

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

Чёрт, как я соскучился по нормальному интерфейсу. Где кнопки это кнопки, а чекбокс это чекбокс, а не ползающий пупырь с меняющейся контекстной поясняющей надписью, не то в прямой, не то в обратной логике.

Согласен. Особенно раздражают элементы управления, которые становятся видимыми только если на них навести курсор (вертикальная прокрутка в панели навигации по документу MS Word 365). Кроме этого есть видимые элементы, но непонятно, что на них можно нажать, пока не подведешь курсок.

Чёрт, как я соскучился по нормальному интерфейсу. Где кнопки это кнопки, а чекбокс это чекбокс, а не ползающий пупырь с меняющейся контекстной поясняющей надписью, не то в прямой, не то в обратной логике.

На любой дистрибутив Линукса можно накатить любую DE и в ней что угодно под себя настроить. Обычно в них по умолчанию все и так нормальное. Вот LXDE например:

LXDE нормальное, но далеко не все линуксовые DE нормальные:)
операционную систему еще не доработали. Но дело осталось за малым

Оптимизм — это, наверное, здорово, но когда взрослые дядьки демонстрируют незамутненную подростковую наивность, это уже по-другому называется. Как тут не вспомнить многострадальную ReactOS, которая последние десять лет «вот-вот и будет готова». Автор поста, вы серьезно считаете, что продемонстрированное поделие при всем уважении к труду авторов, которое (насколько я понял) хоть как-то запускается пока только на виртуальной машине, не умеет в многопоточность, не работает на современный процессорах, не имеет набора драйверов и утилии и пишется командой энтузиастов (я так понимаю, речи о полноценном тестировании не идет) хоть в каком-то обозримом будущем способно выйти в релиз?

У авторов серенити нет никакой наивности. Они пишут это не для того, чтобы оно когда-нибудь стало продакшен-системой, а для развлечения.

А статью написал прям автор серенити? Я в общем-то с авторами и их целью и не борюсь. Меня подбешивает детсадовский уровень статьи рекламирующий компанию Селектел.
авторы проекта утверждают, что система собиралась практически с нуля

Денис Попов тоже что-то подобное утверждал. Наверное, не стоит все подряд утверждения транслировать безо всякой аналитики. Среди комментаторов (смотри комменты) тут же нашелся человек, который потрудился посмотреть в исходники и нашел тонну говнокода. У автора статьи на это мозгов не хватило, зато хватает их на прогнозы типа «дело осталось за малым».
нашел тонну говнокода

И что? Это не противоречит "собиралась практически с нуля" — Попов просто взял дистр линукса и ничего сам не писал, а тут всё самописное, достаточно посмотреть на этот самый код, его качество это уже другой вопрос.


Да и вообще насчёт говнокода — вы в ядро линукса когда-нибудь заглядывали? Там его тоже достаточно — даже сейчас, про первые версии я уже молчу, но ничего, работает ведь, шагает по планете. Можете для разнообразия глянуть на код windows (есть в сети), вообще страх и ужас — но это не мешает ему быть #1 в десктопах.

Когда я слышу «Unix-подобная система с интерфейсом в стиле 90-х» я представляю интерфейс CDE. Зачем же делать интерфейс в стиле винды? Не понимаю!
Кстати интерфейс CDE тоже нормальный, как и интерфейс старой винды. Погуглил картинки — приятно смотреть (хотя я никогда им не пользовался, так что списать на ностальгию не получится).
Он как раз нормальный и интересный (довелось пощупать и его и его предшественника — HP VUE, недавно обзор постил даже). Я не поддерживаю именно имитацию интерфейса винды — их было уже слишком много и нет никакой самобытности у системы в результате.
На самобытность! Даёшь привычный интерфейс!

Объясните, пожалуйста, мне глупому, кому и зачем нужна ОС без софта, ну кроме как для развлечения?

а ещё Колибри есть. И #КОСМОС для создания своей оси. Тоже без нормальных дров и их там никогда не будет.

Я чего-то давно не слышал о подвижках Колибри. Её развивать перестали?

Колибри/Менуэт имеют преимущество в виде своей скорости и возможности запуска на чем-то типа Pentium I, 8 MB RAM. При этом она запускается на реальном железе, лично пробовал. Я удивлен что ей до сих пор не нашли реального применения в каких-нибудь встраиваемых устройствах.

Не мне об этом говорить, но не кажется ли вам, что это изобретение (очередного) велосипеда? Да классно, да идейно, да лучше чем ничего, но это же столько труда и все ради "лофтовой" оси?

Очень и очень интересно.

Буду наблюдать за развитием проэкта. Интересно есть контрибьюторы из России?

Есть :)

Почему никто вместо очередного дистрибутива линукса не напишет ту самую киношную ОС с огромными прогрессбарами и анимацией интерфейса? :)

Кажется кто то не знает, что в KDE есть ретро темы)
Ох уж эти болгенОСы)

НЛО прилетело и опубликовало эту надпись здесь
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.