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

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

Прикольно, конечно, но монолитное ядро и 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м году хотелось бы чтобы компилятор за пользователя что-нибудь все таки делал.

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

На 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'
НЛО прилетело и опубликовало эту надпись здесь

Тогда уж Оберон.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

По-хорошему бы

port->initialize(shall_reset);

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

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

Код действительно плохой, С++ здесь ни при чем. Автор — не профессиональный программист, если можете лучше — причешите и сделайте pull request.
НЛО прилетело и опубликовало эту надпись здесь
Чем бы человек не тешился, лишь бы не сорвался обратно. А так сплошной позитив: у автора любимое дело, у фолловеров интересное наблюдение за автором, для страдающих наркоманией прямой пример того что выход есть.

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

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

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

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

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


:)


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

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

Текущий настолько слабый, что он пока не может даже воспроизводить видео с 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. При этом она запускается на реальном железе, лично пробовал. Я удивлен что ей до сих пор не нашли реального применения в каких-нибудь встраиваемых устройствах.

Она слишком сильно прибита гвоздями к х86 так как написана на ассемблере, да и api у нее очень специфичное, да и ide так таковой под нее нет, по этому серьезный софт на нее вряд ли кто писать будет.

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

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

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

Есть :)

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

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

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий