i would assume a CLR target would do everything as the CLR does it. So yes it would use the system GC (equivalent to gc:none as far as the compiler is concerned.)
Unsafe doesn't mean anything to the CLR. That is a C# keyword that just allows pointer stuff, while in CIL (the bytecode) you just have ops that deal with managed and unmanaged pointers. No special handling by the language needed. Strings I would assume to be ultimately backed by System.String with a thin layer to sugar coat it to match the stdlib. AFAIK we already do that for JavaScript and this is more or less what the .NET languages all do. Interfaces and objects might need a couple pragmas. We already have `method` which does largely what virtual calls do on the CLR. I would be inclined to say interface attachment to objects would also be a pragma. We have concepts now (though I haven't used them yet) but I couldn't say how easily those could be mapped. I don't think we have syntax to say "this object should comply with this concept" because if we did then we could very likely just piggyback on that (with the concept having a pragma to indicate it means an interface, CLR-wise.) Still working on a research project tangential to this. (But more on that when its over.)