When doing development work, is it fairly smooth now, or are there a lot of things that don't work natively and also run into glitches under emulation?
Hoping that some developers can respond with their experiences.
My current answer is to use Scaleway nodes. But due to their licensing constraints, each node must be up for 24 hours. This in turn becomes problematic when you opt to use Terraform as part of a GitHub Action to provision an M1 environment that you can debug against - or heck, Circle.
So now - I leave machines on that aren't guaranteed clean. We write jobs with Fabric and invoke, in order to execute them on remote nodes, and do the best we can. Tooling on the M1 makes it the thing I dislike the most.
The biggest gap I have as a developer is Docker support. I have some projects that produce x86 builds using a Docker container, for example. Docker uses qemu for its emulation layer, and unfortunately it's pretty unstable. I frequently get qemu core dumps, and when it does work it's slow. To get around this, I shell into a Linux box to do this type of stuff.
The main friction is around container environments - we have to quite carefully ensure that containers used for development environments are multi-arch where we didn’t care before. This is straightforward for most environments but can be a pin to build in CI.
I haven't experienced much issues with Docker or .net SDK development work
But I suppose if you're working on low level C/C++ or assembler or drivers or desktop apps, etc you might find more problems. I have no idea about that.
In the past quite some dependencies with native code included with them needed Rosetta emulation but for us that time is gone.