For the past few days, Iโve been heavily developing Husarz - the native web browser for Bursztyn OS. The latest changes are among the biggest improvements ever made to its engine.
The most important change: web pages now have their own styling, independent of the system theme.
Previously, changing the Bursztyn OS theme could also affect the colors of the web page itself. Now, the system theme changes only the Husarz browser interface, while the page content keeps its own appearance.
This has been tested directly in QEMU - both a white page and a black page kept exactly the same colors after switching the system theme, while the browser UI changed correctly. โ
๐จ Much broader CSS support
The Husarz engine now includes support for:
๐ธ all 148 named CSS colors
๐ธ HEX colors with alpha channel
๐ธ rgb() / rgba()
๐ธ basic hsl() / hsla()
๐ธ more advanced selectors
๐ธ nth-child and not
๐ธ inline-block
๐ธ position: relative and absolute
๐ธ an improved box model
๐ธ much better lists and tables
๐ผ๏ธ PNG and JPG directly on web pages
Husarz uses the existing Bursztyn OS image decoders - Iโm not creating a separate PNG/JPEG parser just for the browser.
Now supported:
โ
PNG
โ
JPG/JPEG
โ
<img>
โ
background-image
โ
transparency
โ
scaling
โ
repeat
โ
contain
โ
cover
I also added a ResourceCache, which stores resources in RAM, uses an LRU mechanism, and enforces memory limits.
โก Page loading should no longer block the GUI
This is one of the most important changes.
A separate Ring 3 process has been created:
husarz-worker.bur
It handles blocking HTTP/HTTPS operations, DNS requests, and image decoding outside of the main browser interface.
Husarz also validates the PID, request IDs, tab IDs, and document generations to prevent delayed results from an old request from accidentally being applied to a newly opened page.
๐ Forms are now interactive
Supported elements include:
๐ธ text fields
๐ธ password fields
๐ธ textarea
๐ธ checkbox
๐ธ radio
๐ธ button
๐ธ submit
๐ธ select / option
๐ธ label
Forms are rendered by the Husarz web engine rather than using native BursztynUI system controls.
The GET method works, while POST is still intentionally disabled for now - the current Bursztyn OS networking API does not yet provide a mechanism that I would consider sufficiently safe for implementing POST properly.
๐ Tables have also received major improvements
Husarz now handles rowspan and colspan much better.
The engine builds a logical table grid and ensures that cells do not overlap incorrectly. I also improved column width calculation and border-collapse behavior.
More realistic margin collapsing has also been added, including support for both positive and negative margins.
๐งช And what about testing?
This part has become serious as well.
The engine has passed hundreds of thousands of automated checks, sanitizer-based tests, and direct QEMU testing.
During one of the latest stages, 397,771 host-side checks were completed without sanitizer errors.
QEMU tests covered, among other things:
โ
images
โ
cache
โ
forms
โ
CSS
โ
tables
โ
rowspan and colspan
โ
margin collapsing
โ
the asynchronous worker
โ
system theme switching
โ
maximize / restore
Not everything is finished yet, and Iโm not going to pretend that Husarz is already equivalent to a modern Chrome or Firefox.
Still missing are, among other things:
๐ธ float and clear
๐ธ fixed and sticky
๐ธ z-index
๐ธ full nested scrolling
๐ธ POST
๐ธ WebP, GIF and SVG
๐ธ improved HTTP cache revalidation
๐ธ multiple parallel TCP/TLS connections
๐ธ more complete text selection
๐ธ JavaScript
JavaScript in particular will be a separate, major development stage. A parser, interpreter, DOM, events, and security model are practically an entire subsystem on their own, so I donโt want to add JavaScript โquicklyโ just for the sake of checking another feature off the list.
Another important limitation is that the current TCP stack still uses global state for a single active connection. Before Husarz can truly download multiple resources in parallel, the networking stack needs to be redesigned so that each connection has its own independent state.
Despite these limitations, Husarz has made a huge leap forward.
Not long ago, it was still a very simple browser. Today it already has its own HTML/CSS engine, PNG/JPEG image support, resource caching, forms, a much better layout engine, and a separate process responsible for resource loading.
And all of this runs as a native Ring 3 application in Bursztyn OS. ๐ต๐ฑ
This is still only the beginning, but this is exactly how I want to develop Bursztyn - step by step, testing every new layer and not calling a feature โfinishedโ until it actually works. ๐งก
#BursztynOS #Husarz #PolishOperatingSystem #OSDev #Programming #BrowserEngine #WebBrowser #Cpp #OperatingSystem #MadeInPoland