Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[🍏] Mac ports end at 2.3/1.13, missing newer versions #3697

Open
MarioGuyWasTakenAgain opened this issue Jul 1, 2023 · 5 comments
Open
Labels
Question/Support re: Multiplatform Relating to the Linux and macOS ports (Mono Framework, and eventually .NET Core)

Comments

@MarioGuyWasTakenAgain
Copy link

  1. Why did you stop making Mac ports?
  2. Will you ever make ones for the newest versions?
@Sappharad
Copy link
Contributor

Sappharad commented Jul 1, 2023

I covered this in the forum thread for the Mac builds.

The technology used by BizHawk isn’t available for 64-bit macOS so when Apple dropped 32-bit support everything stopped being possible.

There are some pieces that are possible now but the main versions are not compatible and a lot of effort is required to make some of the dependencies work. That’s the short answer.

@YoshiRulz YoshiRulz added re: Multiplatform Relating to the Linux and macOS ports (Mono Framework, and eventually .NET Core) Question/Support labels Jul 2, 2023
@Sappharad
Copy link
Contributor

Now that I'm sitting in front of a computer, I can type out a more detailed response. Thanks @YoshiRulz for adding links to my reply above this one. I missed some pieces that I explained in the posts linked above, like forgetting that I had done a few 64-bit builds although that stuff broke again around macOS 10.15. Writing this up might help anyone interested in looking into things understand what would be involved to get it working again going forwards.

In short, BizHawk in a .NET App that relies on "Windows Forms" (or WinForms for short) as its UI technology. WinForms was designed for Microsoft Windows. The Mono project was created to run .NET apps on Linux and eventually Mac. They created a version of WinForms that could run on Linux and Mac many years ago. When Microsoft acquired Xamarin (the company that did most of the development work on Mono), Microsoft decided that the best path forward was official support for Linux and Mac and so they created .NET Core which is now the main .NET going forwards. That involved building new technologies that would work well cross platform and WinForms was not one of the things that made sense for them to support on Linux and Mac because it was originally intended for Windows. When Apple dropped 32-bit support, the old WinForms implementation from Mono needed that and broke. Now Microsoft has something called MAUI that can be used across Windows, Mac, Android and iOS because it was designed to be multi-platform from the beginning. But MAUI is completely different from WinForms and not just something you can upgrade to. There are other UI options as well from third parties that work better as multi-platform, but the problem is the entire UI for BizHawk would need to be rewritten in one of these and I don't think anyone has the time or motivation to do that.

When I got BizHawk working again for a few random builds after 32-bit support was dropped, that was the result of efforts by employees of a company that produce a product called eM Client. That company sells an email client written in WinForms on Windows and Mac, so they did most of the development necessary to get WinForms working on newer versions of macOS and open sourced the code here. A big obstacle with this approach is that by substituting a 3rd party replacement for WinForms, every other library that BizHawk depends on also needs to be updated to use that replacement too. In this case, OpenTK which is used to provide OpenGL supports as well sound and game controller support, needs to be rebuilt against the custom WinForms implementation and modified to use it. That's what I had done for the experimental 2019 build of BizHawk 2.1 which no longer runs on current OS versions. There were also some "hacks" that I had to do inside BizHawk to get OpenGL hooked up and working in that state; they were things that could never be cleanly merged into the official codebase.

Over time, things broke again. The guys at emclient updated their version of WinForms to work again with the latest macOS, but at the same time they updated it to work against newer versions of .NET and not older ones. At the moment their version of WinForms only works against .NET 6 and higher, which BizHawk still uses .NET Framework 4 on Windows. @YoshiRulz has a .NET 6 fork that was created a couple years back now which might be a feasible target, but there's still the matter of OpenTK which is needed for 3D acceleration. That's gotten a lot of updates over the past few years and is likely to be even more difficult to adapt to the unofficial WinForms port that I was using before.

It's also worth mentioning that I tried to get some other WinForms apps that I had ported to Mac years ago working against the latest WinForms port from the emclient team but ran into a problem where I got stuck: they compiled but crashed at runtime trying to start. It's been a few months since I've had time to troubleshoot that and will probably revisit it sometime this year.

In short, there are two main approaches that could be taken to get newer BizHawk versions running on macOS again:

  1. Create upgraded patched ports of things:
  • Upgrade BizHawk to .NET 6 or .NET 7, (done in that old fork)
  • Fork the .NET 6 version OpenTK, modify its WinForms to work with the emclient version of WinForms. This modified build would only work on macOS because of the replacement macOS version of System.Windows.Forms.
  • Modify BizHawk to use the modified OpenTK and WinForms builds. This would need to be a fork that only runs on macOS for the previous reason.
  1. Build a completely new User Interface for BizHawk in a multi-platform UI framework that happens to have a 3D accelerated UI control that is also multi-platform.
  • At one point in time I had actually attempted that until I realized how much work it was that it wasn't worth the time. I recall seeing random posts on Discord or here from other people wanting to attempt the same things for other reasons, I'm not aware of those ever going anywhere.

It is definitely possible to do either of these but finding someone with the necessary experience, time, and motivation to do so seems unlikely especially considering that my post offering to walk someone through most of the stuff that I described above was made over 3 years ago now. If I ever get any of the smaller less complex apps that I ported years ago working against emclient's WinForms .NET 6 implementation I may try plugging it into BizHawk again to cobble together a basic build but that could take months, years, or just never happen. I'm occasionally on Discord and still get issue notifications for here in the event someone pops in looking to try and tackle some of this.

@MarioGuyWasTakenAgain
Copy link
Author

I actually read the full thing on this, And wow. I think if you dont know how to build Bizhawk to Mac, You're gonna have to use a virtual machine, But Parallels desktop costs fucking money and that it has this stupid fucking trial day bullshit that I'm fed up with. Sorry for the mini rant and profanity, But if your making a virtual machine, Don't fucking make it so you have to pay for unlimited trial, Use the FL Studio approach instead.

@YoshiRulz
Copy link
Member

There definitely exists FOSS virtualisation software for macOS, for example UTM.

Reopening because this isn't tracked elsewhere.

@YoshiRulz YoshiRulz reopened this Jul 3, 2023
@nattthebear
Copy link
Contributor

The best long term future for Bizhawk is probably a non-winforms rewrite. The situation on macOS is bad as described here. The situation on Linux is also bad, as the only winforms is the mostly defunct Mono variant. The situation on Windows is not significantly better, where the codebase is mostly the leftover junk from .net 2 and they've just been keeping it on life support forever.

@YoshiRulz YoshiRulz changed the title Mac Ports Stopping At An Older Version of BizHawk [🍏] Mac ports end at 2.3/1.13, missing newer versions Nov 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Question/Support re: Multiplatform Relating to the Linux and macOS ports (Mono Framework, and eventually .NET Core)
Projects
None yet
Development

No branches or pull requests

4 participants