Repository navigation
Releases: microlift/rosemary
Release list
v0.4.1
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
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 onglFlush. That gets pre-10.6 apps like Mini vMac on screen.
Added
libsystem_mallocis implemented, somimallocand 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_protectandmach_vm_copynow work across tasks. - Menu bar extras:
NSStatusBarandNSStatusItemappear in your system tray, andNSDistributedNotificationCenterlets 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_KEYlets 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_CLICKstops Control-click from turning into a right click, so you can crouch-and-shoot again.ROSEMARY_NO_PASSTHROUGHnow also coversdlopenanddlsym.- New Darwin calls, including
setattrlist/fsetattrlist,unlinkat/mkdirat,fsctl,gethostuuid,CCRandomGenerateBytesandthread_policy_get. There's also an exact, pure-Rust implementation of thestrtofpfamily. - More CoreFoundation and Foundation:
CFCopyDescription, CFSet callbacks,CFErrorcreation 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
nextDrawablewaits on swapchain copies instead of spinning. - Lower overhead in hot paths: unfair locks,
TASK_VM_INFOqueries, 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
- Studio input and locale by @voidptr67 in #79
- APIs Roblox Studio and Qt 5 call by @voidptr67 in #80
- starnix: report the files a process is using by @frolleks in #101
- darwin: implement setattrlist and fsetattrlist by @frolleks in #100
- network: implement Network.framework's path monitor by @frolleks in #99
- coreaudio: support recording through ahal element 1 by @d29l in #102
- darwin: implement libsystem_malloc by @frolleks in #68
- appkit: let Control stand in for Command in editing shortcuts by @nunreasonable in #112
- corefoundation, foundation: CFCopyDescription, CFSet callbacks and CFError creation by @frolleks in #115
- Firefox 10 support (part 1) by @V3L0C1T13S in #118
- Bound the font cache to prevent memory growth during enumeration by @nunreasonable in #140
- Implement a real Mach task service and Server to Client communication by @V3L0C1T13S in #145
- foundation: export file type constants used by Cocoa file dialogs by @Spencer0187 in #147
- darwin: implement CommonCrypto CCRandomGenerateBytes by @Spencer0187 in #148
- appkit: preserve menu tracking when reassigning the main menu by @Spencer0187 in #146
- darwin: export ___gethostuuid alias by @ActualMasterOogway in #168
- darwin: stub
_abort_error_npby @frolleks in #157 - metal: avoid missed wake after retiring drawables by @Spencer0187 in #162
- darwin: implement unlinkat/mkdirat and preserve readdir errno by @ActualMasterOogway in #164
- appkit: fast-path aligned opaque layer composition by @Spencer0187 in #160
- appkit: deliver mouse tracking to frontmost views first by @Spencer0187 in #169
- appkit: preserve recentering on redundant mouse association by @Spencer0187 in #170
- foundation: implement CFErrorGetCode for bridged NSError by @Spencer0187 in #155
New Contributors
- @frolleks made their first contribution in #101
- @d29l made their first contribution in #102
- @nunreasonable made their first contribution in #112
- @Spencer0187 made their first contribution in #147
Full Changelog: v0.3.0...v0.4.0
v0.3.0
Rosemary v0.3.0
Fixed
- The Steam tool now works on Steam again - we forgot to account for the
environchange ;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_DONTFRAGis now supported on Linux hosts, which should help with application compatibility and overall accuracy
What's Changed
- appkit: implement
NSView clipsToBounds, retainCADisplayLinkacross reschedule by @ActualMasterOogway in #46 - foundation: implement NSMutableString initWithCapacity: and preserve mutability by @ActualMasterOogway in #59
- appkit: fix NSMatrix selection state and add column methods by @ActualMasterOogway in #76
- appkit: implement NSGraphicsContext current context setter by @lAg201007 in #73
- OBJC runtime and Darwin hot paths by @voidptr67 in #77
- Memory Leaks fix, use-after-free and hangs by @voidptr67 in #78
- Get Helltaker (and in turn various other Unity games) running by @V3L0C1T13S in #85
- darwin: translate IP_DONTFRAG to host path MTU discovery by @ActualMasterOogway in #89
- Get Terraria running by @V3L0C1T13S in #90
Full Changelog: v0.2.3...v0.3.0
v0.2.3
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_LIBRARIESandDYLD_LIBRARY_PATHare now respected by Rosemary, with the latter being a requirement for Terraria to find its native SDL libraries.ROSEMARY_PLAIN_CTRL_CLICKdisables 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.mdhas 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
- appkit: implement NSFont systemFontSizeForControlSize by @lAg201007 in #23
- appkit: implement NSButtonCell background style by @lAg201007 in #25
- appkit: keep Num Lock out of numeric-pad flags by @lAg201007 in #24
- metal: back large shared buffers with lazily committed host pages by @V3L0C1T13S in #28
- [PR] Fixed Shiftlock by @voidptr67 in #29
- [PR] Added ROSEMARY_PLAIN_CTRL_CLICK workaround by @voidptr67 in #30
- Update collections.rs by @voidptr67 in #32
New Contributors
- @lAg201007 made their first contribution in #23
- @V3L0C1T13S made their first contribution in #28
- @voidptr67 made their first contribution in #29
Full Changelog: v0.2.2...v0.2.3
v0.2.2
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
- packaging: add pkgbuild by @effects3d in #18
New Contributors
- @effects3d made their first contribution in #18
Full Changelog: v0.2.1...v0.2.2
v0.2.1
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
- metal_translate: support half on GPUs without shaderFloat16 by @paddle1407 in #3
- starnix, darwin: apply musl fixes by @sewnie in #4
- Preserve unbound stubs and images across dlopen calls by @ActualMasterOogway in #10
New Contributors
- @paddle1407 made their first contribution in #3
- @sewnie made their first contribution in #4
- @ActualMasterOogway made their first contribution in #10
Full Changelog: v0.2.0...v0.2.1
v0.2.0
Initial release of the Rosemary compatibility layer
Full Changelog: https://github.com/microlift/rosemary/commits/v0.2.0