Services ? Binder. Intents (even internal ones) ? Binder. Play Services / microG which 90% of apps use ? Binder. Permissions ? Binder.
Services ? Binder. Intents (even internal ones) ? Binder. Play Services / microG which 90% of apps use ? Binder. Permissions ? Binder.
DirectX uses direct hardware access. DirectX uses direct hardware access. That doesn't mean you can't rewrite a DirectX-API implementation without direct hardware access. Likewise, Android's original implementation of MediaCodec uses binder. That doesn't mean that a reimplementation of MediaCodec API requires binder. The vast majority of Android public APIs do not assume binder. The only exception is Service binding, and even then, it's an assumption in name: It assumes that android.os.Binder will provide you an IPC. Most usages of android.os.Binder will be local to an app, so you can easily replace it with any IPC. Even the usage towards multiple app (whose only real usage would be Play Services) doesn't actually require binder. The requirement on that part is just the ""stable"" ser-des.
As an app developer, you (should) never connect directly to /dev/binder, because its API/ABI isn't stable. (it changed like 3 times in the last 6 years?)
I'd be absolutely shocked if that was even a little bit true. Android's binder & AIDL generated code will absolutely do in-process passthrough to avoid the syscall for local calls, but ~nobody is bothering with AIDL unless it's to enable IPC. So that local pass-through is almost certainly rarely if ever used except on "accident" when components nominally support being passed over IPC, but in some cases aren't. An example would be Android's Surface + SurfaceTexture. Normally you're using Surface over IPC either to the display or to media codec or from camera. But if you're using SurfaceTexture, then in that rare scenario it might be local to the process.
But that's definitely a lot less common than IPC binder + AIDL.
All that said, you could almost certainly make a Binder driver shim that just uses unix domain sockets. Heck, Android itself even has one: https://cs.android.com/android/platform/superproject/main/+/...
What'd be a lot harder is handling some of the more advanced graphics & multimedia features. Android's gralloc HAL in particular is likely borderline impossible to implement on Linux as it assumes tight integration between all of the camera, media/video, GPU, and display stacks, and also largely assumes it's on unified memory.
A new strategy is used that is much faster: https://www.phoronix.com/news/Syscall-User-Dispatch-Queued
Yuck. Windows system call numbers are not contractual. At all. Microsoft should try harder to kill any code outside ntdll.dll that makes a system call. It's obnoxious for a developer to deliberately use unstable interfaces and then demand indefinite compatibility.
Not infinite – long enough for the game to bring in most revenue is enough.
Who cares that it stops running one or two Windows updates later for totally avoidable reasons? Definitely not the publisher. (In fact, isn't it about time for an HD remaster again?)
https://learn.microsoft.com/en-us/cpp/intrinsics/fastfail?vi...
1. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
2. https://packages.debian.org/search?suite=buster&arch=any&mod...
I'm pretty sure the overhead for something like Windows Subsystem Android is a few percentage points max, assuming the video card supports the proper OpenGL subsystem (so doesn't require software fallbacks). In fact, given that most x86 laptop CPUs and GPUs offer much more performance than most phone ARM chips, it's basically a moot point. The big problem is finding packages built universally or specifically for x86 (not sure what the status is for WSA on Windows ARM, but that could be an option too).
I'm still waiting for the day Linux offers something similar. Or FreeBSD does something similar to their Linux ABI compatibility.
Edit: looks like WSA is being ended in early 2025:
https://learn.microsoft.com/en-us/windows/android/wsa/
Due to not being able to integrate a store and make revenuue:
https://www.windowscentral.com/software-apps/windows-11/here...
What a shame.
Waiting? Waydroid is several years old at this point, and you've always been able to run Android in a VM via either Google's official device emulator in the SDK or just running https://www.android-x86.org/ et al. in whatever hypervisor you prefer.
Waydroid is slightly more alive, but only barely. And it itself is a fork of now defunct Anbox.
I'm still waiting for Linux to offer a good version of that. I currently use waydroid, and it's barely functional.
You mean a full VM?
It does tend to be very unhappy when the system gets under load though, and might be sluggish if you're running a dozen IDEs on the side.
(Which, as comment under says, is technically a VM. But QEMU gets a pass at pretending not to be a VM and rather just black wizardry that makes bytes happy)
It seems like there were changes made to Binder between the version in Linux mainline and the one in Android.
Until that is properly synched up then using something else will be easier.
But I feel I don't know much about binder/kernel/IPC: maybe I overestimate what that means?