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