Moreover, there's plenty of quirks Windows has with respect to:
- Unicode (UTF-16 whereas the world is UTF-8; even Java uses UTF-8 nowadays, so it's only Windows where UTF-8 is awkward to use)
- filenames (lots of restrictions that don't exist on Mac or Linux)
- text encoding (the data in the same string type changes depending on the user's locale)
- UUIDs (stored in a mixed-endian format)
- limit of open files (much lower than Mac and Linux; breaks tools like Git)
If you write software in Java, Golang, or Node.js, you'll quickly encounter all of these issues and produce software with obscure bugs that only occur on Windows.
I'm not sure about Rust, but using languages that claim cross-platform support isn't enough to hide the details of an OS.
In every job I've had, the vast majority of devs were on Mac OS, with Linux coming in at a close second (usually senior devs). So I wasn't surprised Zed first supported Mac then Linux. Windows support is nice for students, game developers, and people maintaining legacy .NET software, but those people won't be paying for an editor.
Java uses mixed Latin1/UTF-16 strings. The Latin1 mode is used for compact storage of alphanumeric text as the name suggests: https://github.com/openjdk/jdk/blob/1ebf2cf639300728ffc02478...
[1] https://docs.oracle.com/en/java/javase/18/docs/api/java.base...()
[2] https://developer.apple.com/library/archive/documentation/Co...
The charset defines the encoding which applies to first and foremost I/O behavior on how it treats otherwise untyped stream of bytes that are being converted to or from (UTF-16) text as stored by Java.
https://openjdk.org/jeps/400 is yesterday's news and something that .NET has been doing since long time ago (UTF8 encoding is an unconditional default starting with .NET Core 1.0 (2017)).
Whether Win32 APIs take UTF-8 or something else (well, it's usually ANSI or UTF-16) is something for the binding libraries or similar abstraction packages for a language of choice to deal with, and has rather minor impact on the overall flamegraph if you profile a sample application.
I find it strange having to defend this, but the UTF-8 vs UTF-16 argument really has no place in 2024 as dealing with popular encodings is as solved problem as it gets in all languages with adequate standard library.
Anyway, none of these sound like major hurdles. I think the bigger hurdles are going to be low-level APIs that Rust probably doesn't have nice wrappers for. File change notifications and... I don't know what. Managing windows. Drivers.
And Windows is by large the development platform of choice for any serious gamedev work.
git clone https://github.com/zed-industries/zed
cargo run --release* The framework they use supports X11 and Wayland out of the box, it wasn't as much effort as you'd think.
* They accept contributions.
I realize yall are out there, but from where I'm sitting, this isn't odd at all. They're likely most familiar with and using Unixes.