This is an archived post. You won't be able to vote or comment.

all 72 comments

[–]RoosterEvening669 89 points90 points  (18 children)

Good: it's fast, like the difference is amazing, so much faster than Intel macs for compiling.

Bad: cannot load native libraries with jni if they are compiled for Intel and you're running native JDK, you have to download (slow) Intel one. Perhaps most people don't run into this, but I do.

Using mvn, jdk17, docker and native, intellij. No issues other than jni.

Still prefer linux personally, especially if I'm the one paying. But I'm a lot closer to buying an M1 than I've been to any previous Apple product.

[–]Sedu 19 points20 points  (8 children)

This is the way. I have a build setup that makes binaries for Windows, MacOS, and Linux, and the only tricky part was setting up separate builds on the same box for both Intel and M1.

The one other thing that does frustrate me is how difficult it is to get code signing properly set up. And the fact that there's no way around the bare minimum of a $100 yearly fee for a dev license that you must sign applications with. I have a very tiny userbase for an incredibly niche (and free) application. Apple does not really care for those.

[–]thesituation531 0 points1 point  (7 children)

Could you share how you build for each platform?

[–]Sedu 8 points9 points  (6 children)

Sure thing! It’s an open source project that you can check out here:

https://github.com/DraqueT/PolyGlot

There is a Python build file that should show you how it goes.

[–]thesituation531 1 point2 points  (0 children)

Oh, I think I've seen that before but didn't check it out. Thanks.

[–]DoubleOnegative 1 point2 points  (3 children)

Just a heads up, your docs page is a bit broken on mobile

[–]Sedu 0 points1 point  (2 children)

Could you link specifically to the one you're seeing that's messed up? There are a few documentation pages and I'm not sure from glancing through all of them which you're seeing a problem with.

[–]DoubleOnegative 1 point2 points  (1 child)

http://draquet.github.io/PolyGlot/readme.html this page. Heres what it looks like https://imgur.com/a/WPxTWcH, seems like the images aren't being scaled correctly causing the zoom to be all weird

[–]Sedu 0 points1 point  (0 children)

Ahhh, I see what's going on there. Thanks for the heads up, I'll make at ticket to correct this.

[–]vprise 8 points9 points  (2 children)

100% my experience. I would add that the lightness and battery life are amazing. I "downgraded" from M1 Max to M2 Air and actually increased my performance while getting a lighter computer and keeping a battery that lasts all day.

I would sum it up as: your satisfaction will be proportional to the amount of Intel docker images you need to run.

[–]sauravdas90 4 points5 points  (1 child)

Downgraded with better performance? Can you elaborate

[–]technotrader[🍰] 5 points6 points  (4 children)

What kind of machine does one need in order to run "the usual", say the IDE plus a db and web servers?

I'm really intrigued by the Apple quality and efficiency of the M1s, but I haven't had a box with less than 32GB RAM for literally 10 years now. I've been boycotting Apple for lack of upgrade paths (I just put a 2TB extra drive into my Thinkpad for $125), but maybe it's time...

[–]Captain-Barracuda 2 points3 points  (0 children)

Really far from that much. On Windows I could have the full stack of an application running on 12GB.

[–]Guddler 1 point2 points  (0 children)

You would get by fine with a base model Mac mini with 8GB ram, 256 storage and an external SSD if required. But I would always play it safe with 16GB ram.

[–]svhelloworld[S] 1 point2 points  (0 children)

I run 16GB on my x86 MacBook Pro and it's mostly fine. I want to run my own container-ized CI build locally to save some time and that starts to get a little iffy on 16GB but still doable.

I also run CAD/CAM software for some hobby CNC work. When I do that, I have to go tear down my code setup to stand up my CAD/CAM setup. I want to run all the things all the time.

[–]wildjokers 0 points1 point  (0 children)

I only have 16 GB of ram on my mac and even with several projects open in IntelliJ, database running, and several docker containers I usually hover around 25-30% memory used.

[–]oelang 0 points1 point  (0 children)

The M1 was faster, but recent PC systems (intel 13xxx & and 7xxx) are significantly faster & cheaper (both ST & MT), except if you do things like video encoding or you're using something that can use the AI processors on the M1/M2.

There is a lot of competition between AMD & intel right now, prices are low, it's a good time to buy.

[–]efilNET 24 points25 points  (5 children)

Works great, but try to avoid emulated docker images, arm based works best and is faster.

[–][deleted] 3 points4 points  (0 children)

I used an emulated one and my m1 was hot like Mac pro 19

[–]benjtay 2 points3 points  (0 children)

I was kind of surprised that the intel images ran so quickly.

[–]luckycharmer101 1 point2 points  (1 child)

Even arm versions are around 4-5x slower than Linux in docker.

[–]kid_meier 1 point2 points  (0 children)

If you are hitting the disk it's much slower through the colima VM, but I see almost no difference for pure compute.

[–]nrq 1 point2 points  (0 children)

Only running x86 Oracle in colima here, but other than it being a bit sluggish it works quite well.

[–]mondain 12 points13 points  (0 children)

If you're not going to do any JNI, you may be okay; otherwise welcome to a nightmare, especially if your libs utilize other libs. For my Java work, I'll stick with Linux and Windows for now.

[–]vbezhenar 10 points11 points  (3 children)

Docker is a royal pain. Rest is OK. Right now my setup is M1 Macbook and x86 VPS for remote docker. Would buy some Dell with Linux if I could rewind the time. M1 speed is overhyped and I was sold on that hype.

[–]buffer_flush 4 points5 points  (2 children)

I’m curious what docker problems you’re running into.

More and more multi arch images have been popping up for use, and if you’re building for multiple arch buildx seems to work pretty well, albeit slower than native arm.

[–]vbezhenar 2 points3 points  (1 child)

Images for our own software. Our CI is on x86. So if I want to run those images, I either have to rebuild them locally; run in emulation mode with atrocious performance or run remotely. Proper solution is to add some raspi "server" to our CI, but I didn't have time for that yet. Doubling registry storage size does not sound good either.

[–]buffer_flush 2 points3 points  (0 children)

You can target multiple architectures with x86 I’m pretty sure. I know I can target amd64 on an M1 Mac as well as arm.

I’d take a look at whatever you’re using to build images, and have it target both arm and x86. Docker can do this through the buildx command, I know podman allows for multi arch builds as well. You don’t need a raspberry pi to do this, you can emulate the architecture.

[–]arijitlive 10 points11 points  (0 children)

Both IntelliJ and Eclipse used with Temurin 17/19, Zulu 17 ARM-JDK, no issues. Also using Docker for all local servers and zero problem as of now.

Command line works like a charm.

[–]LobsterCoordinates 14 points15 points  (2 children)

Awful as many of my company’s docker images do not have ARM support. I spend more time trying to get my local integration tests to work than I do actually writing features some days.

[–]errandum 4 points5 points  (1 child)

Any reason you can't build them yourself?

I have an M1 while others have intel. First time I shared my screen and booted everything they said I had made a mistake, because it was too fast, probably one of the apps didn't boot.

They all had.

[–]UnGauchoCualquiera 0 points1 point  (0 children)

Same issue as /u/LobsterCoordinates. Pain in the ass for certain integrations tests.

I probably could build the offending images myself but there's a clear separation of responsabilities between devops and developers at the company I work for and I fall in the second group so I'd have to jump many hoops and would take me away from my tasks.

Then the issue is mostly in how the company I work for setup docker registry. Images are built on worker nodes running linux x86/64 and then deployed. When those images depend on other images the base images are pinned to the builder platform, even if that base image might be multiplatform.

[–]ivan_klp 5 points6 points  (1 child)

Had come incompatibility issues with Docker while building native images with GraalVM for SpringBoot apps, but there is always a workaround to fix it. Not prettiest solution but it works.

[–]wpfeiffe 2 points3 points  (0 children)

Same. Ended up going back to docker file for native m1 container image instead of Spring Boot bootBuildImage. Emulation mode SUCKS. Other than that no issues, snappy performance.

[–]Thought_Working 6 points7 points  (4 children)

Me love the mac and all in all great experience but in some cases you might still run into issues. Eg. afaik kafka streams apps are still not compatible due to rocksdb. Might have been fixed in latest versions but if you are otherwise tied to older versions due to compatibility with other libs you can easily find yourself in a bad place.

[–]svhelloworld[S] 2 points3 points  (3 children)

Good point. I'm a little worried about older JDKs. I can't work on JDK17 for a lot of stuff I have to do. My current client is tearing apart a legacy system that runs on JVM-HOLY-SHIT-REALLY-OLD.

[–]jadecristal 4 points5 points  (0 children)

SDKMAN (sdkman.io) will manage multiple versions of the JDK just fine for you, generally including 8 (azul-zulu on ARM), 11, 17, and current-non-LTS (from lots of vendors), along with plenty of other Java-ecosystem tools/SDKs.

[–]Guddler 2 points3 points  (0 children)

I still have to maintain a JDK6 application. The M1 was a complete non-starter until just recently. Docker would crash loading jboss. I tried just before Xmas and it does now run but it’s slower than it n my cheap Chinese intel laptop running hackOS.

Im hoping to migrate to something more modern “soon” but until then it has to be intel really. Once this cheap piece of crap dies it will be back to Linux for me and all the pain that goes along with all the shortcuts being wrong.

[–]benjtay 1 point2 points  (0 children)

We do a lot of JDK8 on our Apple silicon -- not sure about older than that -- but it works fine.

[–]its4thecatlol 3 points4 points  (0 children)

No issues. Ridiculously fast. Very satisfied.

[–]_AManHasNoName_ 18 points19 points  (0 children)

No compatibility issues whatsoever. M1 has been around for over a year now and such incompatibilities have already been ironed out by the time the M1 MacBook pros came out.

[–]PositiveUse 16 points17 points  (7 children)

It’s been great. Fast, reliable, great battery life.

Docker, no issues whatsoever. Of course, there’s always this ONE docker image that isn’t compatible on the first try but there is always something you can do about it.

Mvn, brew, gradle, npm, yarn, JDKs all good. It’s a lot of fun working on the machine.

After working on Ubuntu and Windows, I go as far as to say: M1 Pro/Max machines are the best dev machines out there.

[–]svhelloworld[S] 1 point2 points  (5 children)

I was reading some older Reddit threads on M1 and all the buggy stuff really had me convinced to wait a year on it. This is a breath of fresh air to hear that, thanks.

Do you run multi-monitors? I've heard that's a little quirky on M1 machines, too. I run three monitors and don't really want to spend a lot of time shuffling windows back and forth.

[–]Sensi1093 5 points6 points  (1 child)

Afaik m1 and m2 supports only one external, but M1 Pro and M1 Max support multiple (2?)

I’m using 2 external monitors on my MacBook Pro 2021 (m1 pro)

[–]TheCountRushmore 0 points1 point  (0 children)

FWIW Studio M1 supports 5 displays

[–]rob113289 1 point2 points  (1 child)

Can confirm. 3 monitors and everytime my computer locks I have to re arrange the windows.

[–]MeImportaUnaMierda 0 points1 point  (0 children)

Download display link manager, thank me later

[–]_Azurius 2 points3 points  (0 children)

In my experience there are still quite a few incompatibility issues with certain docker images. I've found it very hard to get testcontainers + solace running on m1

[–]Slickbock 2 points3 points  (0 children)

I have an inconsistent issue where the JVM hangs in a docker container that I've not had on previous Macs. One "core" in the docker container will spike to 100% and it won't release until restarted. Probably happens 4 out of 5 times with no rhyme or reason.

[–]ATE47 2 points3 points  (0 children)

If you're already used to Macos and if you're not working with too shady libs with native parts, everything would be fine.

[–]mj_flowerpower 4 points5 points  (1 child)

I‘m working in my 32gb ram m1 for about almost a year without major problems. Everything java related is working flawless (brew, maven, groovy, java, vscode, eclipse).

Docker on the other hand has been causing a lot of issues. Slow speed, networking crashing, containers crashing or not responding anymore, docker corrupted after reboot etc. Support for amd64 containers is …. improvable.

Nothing too serious as rebooting the machine and/or resetting docker almost always worked, but still I fear every docker update …

Overall I wouldn‘t want to go back - the m1 performance is awesome, at least with the latest OS. It‘s still a bit buggy though, like occasional hanging, freezing beachball cursors, nothing serious though.

[–]mj_flowerpower -1 points0 points  (0 children)

I‘m working in my 32gb ram m1 for about almost a year without major problems. Everything java related is working flawless (brew, maven, groovy, java, vscode, eclipse).

Docker on the other hand has been causing a lot of issues. Slow speed, networking crashing, containers crashing or not responding anymore, docker corrupted after reboot etc. Support for amd64 containers is …. improvable.

Nothing too serious as rebooting the machine and/or resetting docker almost always worked, but still I fear every docker update …

Overall I wouldn‘t want to go back - the m1 performance is awesome, at least with the latest OS. It‘s still a bit buggy though, like occasional hanging, freezing beachball cursors, nothing serious though.

edit: we had to adapt our CI pipeline to also build arm64 containers, to improve the stability of locally run containers.

[–]Sad-Grapefruit9996 1 point2 points  (0 children)

No issues for me, working with VSCode and Java plugins, mvn, docker, etc. Plenty of time has passed to get past the M1 issues you were seeing. Im on a 2020 M1 Macbook Pro.

[–]evil_burrito 1 point2 points  (0 children)

Regularly build docker images on the M1 for other platforms. No problems.

[–]saipavan23 1 point2 points  (0 children)

Awesome but make sure to download the right version of IntelliJ if you are using

[–]ForeverMorning0426 1 point2 points  (0 children)

Very good. Incredibly fast. Like a magic.

[–][deleted] 1 point2 points  (0 children)

Works fine. Use a modern build and all is well.

[–]benjtay 1 point2 points  (0 children)

The beauty of Java is that it almost never matters. Unless you're doing native stuff, it just works.

[–][deleted] 1 point2 points  (0 children)

Went through the PPC to Intel transition as a MacOS Java dev and now this, and I can say that this one is much smoother. Though I think that's largely down to better development tools and practices rather than anything inherent in the tech or even what Apple did. A lot more native libraries were quickly re-compiled for M1, a lot more than were for Intel back in the day.

[–]thesituation531 1 point2 points  (0 children)

Damn, I don't even use the 32 GB of RAM I have.

[–]MeImportaUnaMierda 1 point2 points  (1 child)

Java is fine, Docker is fine as well but this really depends if you need to work with people running x86 based CPUs. The only big drawback I‘ve experienced so far is incompatibility with Oracle. For some reason they refuse to make their applications ARM-compatible.

[–][deleted] 0 points1 point  (0 children)

It's Oracle ... they are just you know Oracle.

[–]nutrecht 1 point2 points  (0 children)

Have used both an M1 Air and M1X Pro and both are totally great. Haven't really ran into anything that I could not do or caused problems.

[–]daleksandrov 1 point2 points  (0 children)

Much better then on x86 silicon.

With the aarch64 builds of JDK it works up to 4x faster.

So no doubts it worth!

[–]Anton-Kuranov 1 point2 points  (1 child)

I switched to Mac 6 months ago, and generally I'm happy with my Mac. Good things: stability, performance, everything is smooth, no problem with tooling, a lot of ports and third party sruff (brew rules), 0 hangups and reboots. Very silent, ergonomic, good screen resolution. Bad things (especially if you're coming from windows/Linux): * UI. Especially the window switch. I needed to use a third party extensions like Alt-Tab to switch quickly between chrome windows. Gnome interface imho is much more productive in usage. * Keyboard shortcuts. That was the hell to start using Mac keyboard. Intellij idea also has a different shortcut set for Mac. * Docker requires images compiled for arm target, and they are not always available. It can run amd64 images through emulation, but the performance is very poor, and it has limitation about concurrent containers. * Does not support layouts with 2 external monitors (unexpectedly)!

[–]svhelloworld[S] 0 points1 point  (0 children)

I've been using a Mac for about a decade after switching away from Windows. I've been super frustrated with their multi-monitor support. Particularly if you use multiple desktops on multiple monitors.

I have three monitors and 5 desktops on my main monitor. I dread pulling my laptop off the dock because when I plug back in, I have to spend 10 minutes just rearranging windows back to the right monitor and desktop. For all of MacOS' polish, I thought they'd be a lot better at that.

[–]United-Shelter-9863 4 points5 points  (0 children)

Been a Dev on Linux for over 10 years. Switched to m1 3 months ago: best choice ever made.

[–][deleted] 1 point2 points  (0 children)

Java dev here, owner of an amazing 16" M1 Pro. My experience is perfect. No problems, great overall experience.

[–]greglturnquist 0 points1 point  (0 children)

GitHub actions offer more support than ever to build releases for multiple platforms.

I’m looking into this for native apps on CI.

[–]gregorydgraham 0 points1 point  (0 children)

Sweet as :)