Skip to content

Releases: microlift/rosemary

v0.4.1

Choose a tag to compare

@V3L0C1T13S V3L0C1T13S released this 22 Oct 23:02
21b2be4

Rosemary v0.4.1

Highlights

This is a tiny patch release for Rosemary, primarily polishing up issues with X11 pointer warp, IOSurface presentation hot paths, and fixing a bug that could cause out of prefix socket name leakage. This same bug also broke open and friends in Butter and other environments with large directory names.

What's Changed

  • corefoundation, foundation: clean up Darwin descriptor state on close by @Spencer0187 in #174
  • appkit: deduplicate unchanged IOSurface contents and reduce redundant compositing by @Spencer0187 in #177
  • appkit: fix X11 cursor drift during relative mouse input by @Spencer0187 in #178

Full Changelog: v0.4.0...v0.4.1

v0.4.0

Choose a tag to compare

@V3L0C1T13S V3L0C1T13S released this 21 Oct 21:25
171ada5

Rosemary v0.4.0

This one's a big one. v0.4.0 brings a web browser from 2012 back to life, gets Roblox Studio running, fixes keyboard input for a whole family of SDL2 games, and makes the emulator a good deal faster. Under the hood, Rosemary now has a real Mach task service, which much of the next round of work will build on.

This is also the first release where much of the work came from people other than me. Seven people contributed code this cycle, and four of them are new. Thank you all, it's genuinely exciting to watch this grow ❤️

Highlights

  • Firefox 10 runs! This was by far the biggest job of the cycle. Firefox draws almost everything itself through Quartz 2D, so we built Quartz 2D and CoreGraphics on top of tiny-skia, along with ATS/CGFont font support and HITheme/CUIDraw widget drawing. Then we filled in every gap in AppKit, CoreFoundation and Carbon that Gecko ran into. Seeing the browser UI come up for the first time was a very good day.
  • Roblox Studio runs, and input works properly now: mouse and keyboard events no longer arrive twice, and locale handling is fixed. A lot of the Qt 5 APIs Studio depends on are now in place too.
  • SDL2 games get keyboard input. Titles like Doki Doki Literature Club are playable now, not just watchable.
  • Starbound runs, thanks to a fix for Darwin's temporary directories. New prefixes get /private/var/tmp, and existing prefixes are repaired automatically.
  • Older Cocoa and OpenGL apps work better. We now support classic relocations, guest class aliases, the old NSAddImage/NSLookupSymbol* dyld APIs, and single-buffered GL contexts that present on glFlush. That gets pre-10.6 apps like Mini vMac on screen.

Added

  • libsystem_malloc is implemented, so mimalloc and other allocators can safely register their zones with the system.
  • A real Mach task service, with messages flowing from the server to clients. task_suspend/task_resume, mach_vm_read, mach_vm_write, mach_vm_protect and mach_vm_copy now work across tasks.
  • Menu bar extras: NSStatusBar and NSStatusItem appear in your system tray, and NSDistributedNotificationCenter lets apps talk to each other.
  • Apps that ask to run as a single instance (LSMultipleInstancesProhibited) are now respected. Launching one a second time sends arguments to the copy that's already running.
  • Network.framework's path monitor, so apps can tell when you're online.
  • Audio recording through the AUHAL input element.
  • ROSEMARY_COMMAND_KEY lets you choose which host key acts as Command, including a mode where Control stands in for Command only in editing shortcuts. Handy on desktops that keep Super-letter combos for themselves. ROSEMARY_PLAIN_CTRL_CLICK stops Control-click from turning into a right click, so you can crouch-and-shoot again.
  • ROSEMARY_NO_PASSTHROUGH now also covers dlopen and dlsym.
  • New Darwin calls, including setattrlist/fsetattrlist, unlinkat/mkdirat, fsctl, gethostuuid, CCRandomGenerateBytes and thread_policy_get. There's also an exact, pure-Rust implementation of the strtofp family.
  • More CoreFoundation and Foundation: CFCopyDescription, CFSet callbacks, CFError creation and codes, CFBundleGetDataPointerForName, and the file type constants used by Cocoa file dialogs.
  • The Nix package bundles xkbcommon and libpulse, and the project gained direnv integration.

Fixed

  • Emulated backend, now NOT turning Mono into a threaded interpreter! The block-link table is now 65536 rows × 4 ways (up from 8192 × 1). On a Unity/Mono benchmark that cut VM exits from about 21,000 per frame to under 100. Code a guest generates or rewrites at runtime is now invalidated correctly as well.
  • Emulation on ARM hosts is more reliable. Total store ordering is enabled by default on non-x86 hosts, which fixes lock-free guest code (Mono, for one) that could see memory writes out of order. If you need to, you can turn it off with ROSEMARY_TSO=0.
  • Metal is a bit faster and more consistent. Drawables no longer miss wakeups, and nextDrawable waits on swapchain copies instead of spinning.
  • Lower overhead in hot paths: unfair locks, TASK_VM_INFO queries, and layer composition (opaque, aligned layers now take a fast path).
  • Apps with complex multi-view setups receive mouse tracking events in the correct order, frontmost view first.
  • The main thread now wakes up correctly when work is dispatched to it.
  • Older Unity games no longer crash when switching to fullscreen.
  • Mach-O segments are mapped straight from their files.
  • Image re-exports in our dyld are resolved correctly.
  • Memory leaks fixed, including unbounded growth of the font cache during font enumeration.
  • WebKit no longer panics when xkbcommon isn't installed.

What's Changed

New Contributors

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@V3L0C1T13S V3L0C1T13S released this 15 Oct 21:50
91314d4

Rosemary v0.3.0

Fixed

  • The Steam tool now works on Steam again - we forgot to account for the environ change ;p
  • Various memory leaks were patched in the process of reworking parts of Metal
  • A few use-after-free bugs were patched, improving program stability

Added

  • Metal now supports various features necessary for games ranging from more modern Unity versions to FNA ports
  • Objective C is now much more performant - under single threaded workloads, performance improves ~3x, at more multithreaded workloads it can be ~40x. This in particular helps with Metal games running under stress
  • Various Steam applications now fully work, including Terraria and Helltaker. A few other games such as DDLC now run, albeit with issues
  • IP_DONTFRAG is now supported on Linux hosts, which should help with application compatibility and overall accuracy

What's Changed

Full Changelog: v0.2.3...v0.3.0

v0.2.3

Choose a tag to compare

@V3L0C1T13S V3L0C1T13S released this 14 Oct 02:24
91e2de2

Rosemary v0.2.3

Fixed

  • Apps now receive accurate Metal pipeline statistics.
  • Mouse association (AKA mouse lock) should now work on all X11 and Wayland compositors equally, thanks @voidptr67!
  • Apps no longer receive number lock events on all numeric keycodes unconditionally.
  • Metal shared buffers are now lazily allocated as on macOS, drastically improving performance and reducing overall memory usage.
  • AppImage client side decoration should now render correctly on Metal.
  • Rosemary will no longer load conflicting Vulkan libraries, fixing a bug that causes SDL to think Wayland is incompatible with the current system, making it fall back to X11.

Added

  • DYLD_INSERT_LIBRARIES and DYLD_LIBRARY_PATH are now respected by Rosemary, with the latter being a requirement for Terraria to find its native SDL libraries.
  • ROSEMARY_PLAIN_CTRL_CLICK disables macOS's ctrl + click acting as right click behavior, useful for games.
  • ROSEMARY_METAL_PRESENTATION_MODE - allows forcing the Vulkan presentation mode in Metal applications.
  • ROSEMARY_SCREEN_REFRESH_RATE - allows changing the screen's refresh rate property to apps to unlock their framerate.
  • The host's environment variables are now isolated from Darwin applications, improving compatibility and isolation.
    • docs/usage.md has been updated with more detailed information on how to give Darwin applications environment variables after this change.
  • The AppImage and Steam tool packages now ship with a bundled WebKitGTK.

What's Changed

New Contributors

Full Changelog: v0.2.2...v0.2.3

v0.2.2

Choose a tag to compare

@V3L0C1T13S V3L0C1T13S released this 13 Oct 00:25
04dce85

This release gets NBCraft to run underneath Rosemary, properly implements dlclose instead of nopping it, and adds environment variable knobs for tuning Metal's Vsync mode.

What's Changed

New Contributors

Full Changelog: v0.2.1...v0.2.2

v0.2.1

Choose a tag to compare

@V3L0C1T13S V3L0C1T13S released this 12 Oct 05:12
f318d05

This release bumps our base system to MiniDarwin v14, and moves us away from hackily parsing the fontconfig CLI output for finding system fonts. We now use rust-fontconfig for font discovery. As this change is experimental, if you encounter regressions with fonts we encourage you to report it. This may also change the bold text in the title bar. Previously it was falling back to another font because it couldn't find the bold variant of its preferred font with fc-list.

What's Changed

New Contributors

Full Changelog: v0.2.0...v0.2.1

v0.2.0

v0.2.0 Pre-release
Pre-release

Choose a tag to compare

@V3L0C1T13S V3L0C1T13S released this 11 Oct 07:13
27fe070

Initial release of the Rosemary compatibility layer

Full Changelog: https://github.com/microlift/rosemary/commits/v0.2.0