Which older OSes? The last 1.20 dot release was earlier today, some years from now it will be stale and probably insecure, though that matters less for internal apps than for internet-exposed ones.
Depends on what you want your toy language to do and what sort of runtime support you'd like to lean on.
JVM is pretty good for a lot of script-y languages, does impose overhead of having a JVM around. Provides GC, Threads, Reflection, consistent semantics. Tons of tools, libraries, support.
WebAssembly is constrained (for running-in-a-browser safety reasons) but then you get to run your code in a browser, or as a service, etc, and Other People are working hard on the problem of getting your WA to go fast. That used to be a big reason for using JVM, but it turns out that Security Is Darn Hard.
I have used C in the (distant) past as an IL, and that works up to a point, implementing garbage collection can be a pain if that's a thing that you want. C compilers have had a lot of work on them over the years, and you also have access to some low-level stuff, so if you were E.G. trying to come up with a little language that had super-good performance, C might be a good choice. (See also, [Wuffs](https://github.com/google/wuffs), by Nigel Tao et al at Google).
A suggestion, if you do target C -- don't work too hard to find isomorphisms between C's data structures and YourToyLang's data structures. Back around 1990, I did my C-generating compiler for Modula-3, and a friend at Xerox PARC used C as a target for Cedar Mesa, and Hans used it in a lower-level way (so I was mapping between M-3 records and C structs, for example, Hans was not) and the lower-level way worked better -- i.e., I chose poorly. It worked, but lower-level worked better.
If you are targeting a higher-level language, Rust and Go both seem like interesting options to me. Both have the disadvantage that they are still changing slightly but you get interesting "services" from the underlying VM -- for Rust, the borrow checker, plus libraries, for Go, reflection, goroutines, and the GC, plus libraries.
Rust should get you slightly higher performance, but I'd worry that you couldn't hide the existence of the borrow checker from your toy language, especially if you wanted to interact with Rust libraries from YTL. If you wanted to learn something vaguely publishable/wider-interesting, that question right there ("can I compile a TL to Rust, touch the Rust libraries, and not expose the borrow checker? No+what-I-tried/Yes+this-worked") is not bad.
I have a minor conflict of interest suggesting Go; I work on Go, usually on the compiler, and machine-generated code makes great test data. But regarded as a VM, I am a little puzzled why it hasn't seen wider use, because the GC is great (for lower-allocation rates than Java however; JVM GC has higher throughout efficiency, but Go has tagless objects, interior pointer support, and tiny pause times. Go-the-language makes it pretty easy to allocate less.) Things Go-as-a-VM currently lacks:
- tail call elimination (JVM same)
- don't ever construct a pointer to Object+sizeof(Object) (i.e., to the first byte past the end) (JVM same)
- defined semantics for racy programs that don't use atomics (structures can tear; there is a race detector, use it). (JVM same-ish; racy programs suck)
- integer overflow checking (JVM same)
- consistent conversion from +/-FPInf to integers,
- if you're not careful about expressing floating point a+b*c, you'll get the platform multiply-add rounding
- signaling/quiet NaN representation follows the platform
Some of these are on my list of Would-Be-Nice to fix, but that doesn't mean they will happen, because there are O(zero) people using Go as a VM, as far as I know, so their problems have zero weight. Tail-call-elimination in particular would be hard, and I see no substantial benefit in solving the pointer-past-end problem (it's a minor issue in our own code generation, and we deal with it).
Hi, I'm one of the people who worked on it, and the guy who did the initial estimate back in early 2017. 5% is the geomean of a lot of benchmarks; a whole lot fall in the the 4-8% range, a few do worse because the new ABI creates new patterns of register use that don't fit well with the current register allocator, and the fix was larger than we wanted to risk. (See https://github.com/golang/go/issues/46216 )
Sure, but the people who work for the US Attorneys, where do they come from? And what is the pool of people from which the president chooses US Attorneys? This is an organizational/cultural thing.
Not much to add given that you are consulting with counsel, but be aware that one extremely valuable attribute of legal counsel is that is where you deposit any documents that you think might be relevant -- you will surely be required to surrender all employer IP if fired, if you think there are legal issues that require you to retain documents, it's almost necessary to have them in a lawyer's care (and the lawyer will tell you what to say). I think and (IANAL) it would be something like "I was concerned about the circumstances of my termination, and I felt I needed to consult a professional to be sure I took the right steps." Which is true, yet vague, yet also not overtly threatening.
I would be wary of whistleblowing, but I would also be very wary of saying anything more to your employer than what is legally required (or than your lawyer advises). I don't see that we have socially made whistleblowing worth the risk to you, therefore, you should not take that risk, but if it helps your case, your severance, whatever, for your soon-to-be-former employer think that you might make trouble for them if they piss you off even more, that might be okay (if they're certain that you might make trouble for them, that's another matter and maybe a problem).
For the non-legal and probably more useful advice, this does not sound like a job that is worth keeping. You can't fix a bad boss, you're not paid enough to fix a bad boss (it ought to be the case that you would get a massive bonus for fixing a bad boss, but sadly the world does not work that way) better to look out for your own sanity and well-being. Don't burn bridges, don't slack off, I also don't recommend knocking yourself out in an attempt to save your job because (you wrote here for advice, here it is) it's not worth saving, DO prepare a resume and send it out, and follow the usual recipe of applying to as many places as you can stand managing all at once. It ought to take a few weeks for the sent resumes to turn into interviews, so it's not that likely to take too much of your (not-slacking-off) time. Ask your lawyer exactly what to say if a potential employer asks why you're leaving, because it's a delicate dance and there's things you probably cannot safely say (for example, what you've said here...).