This is, to put it mildly, a consequential proposal. Maybe this is a weird thing to say, but I think it should be a tough call. There are serious source compatibilty concerns. This may also make maintaining backwards-compatibility with older compilers even more of a pain. But perhaps worst of all, this proposal would invalidate (or at least complicate) lots of material out there that explains how things work. This will introduce some short-term confusion, but I'm worried it could be end up being a medium-to-long-term problem too. This is particularly bad timing for more confusion.
Lots of people get started with concurrency by translating completion handler-based functions into an async version. In fact, this process is encoded into the compiler itself with Obj-C->async stuff. However, SE-0338 can make this seemingly straightforward change a big problem. It makes these kinds of direct translations incorrect in the general case. For Obj-C, I'm not even sure how to address the problem, because that can require Swift-only constructs. I have also encountered code that was fundemantally incorrect, but relied on @preconcurrency import to paper over the problems caused by introducing async functions on non-Sendable types.
Now, to be fair, some of these problems are only possible because warnings are off. That is the default though, so it really matters. But, putting that aside, I'm pretty sure this propsoal would make things work correctly in many of these cases. That really underscores the motivation here. Developers just expect things to work this way. Relying on education is fine, but even better is not needing it the first place.
To me, the most important concern is the affect on existing non-isolated async functions. I know this is a forthcoming section of the proposal, but as written I'm unsure how to rigorously audit a code base to be sure you aren't introducing unintended behavior. Also, this doesn't just have peformance implications! I could totally believe that freeing up an actor as a side-effect of calling an non-isolated function could be a critical runtime behavior. Runloop interactions like that, for example, can be very subtle and non-obvious.
I think that @nkbelov's suggestion of variants on the nonisolated keyword is facinating. I also think @Jon_Shier's async(global) is really interesting too. Moving the execution into the effect draws a more clear line between isolation and execution, which is kinda what's happening here. Both ideas also might also help with the source compatibility story. This doesn't mean I'm saying I'm opposed to the @concurrent annotation. I just think these ideas are very interesting and definitely worth more exploration.
I strongly sympathize with, but ultimately do not share, the concern that @Alejandro_Martinez has about cognitive load here. It's true, just marking something nonisolated is convenient. Speaking for myself, it has become second-nature. But is it easy to understand? I have found it consistently challenging to explain. People seem to remember it fairly easily, but I have seen very little evidence it is intuitive. I think it is a certainty this will result in more main-thread blocking than before. But, I think significant amounts of work shifted off the main thread today, in real projects, is both accidental and incorrect.
Also, personally, I just want to second @sliemeobn's praise of the team to consider something like this. Even if it does not ultimately succeed, I think it's wonderful and important to see.
Whew, sorry about writing so much. I'm strongly in favor of this change, as long as the source compatibility can actually be pulled off in a non-disruptive way.