Bytecode is executed by being fed into Roblox’s deserializer.
It has to be Luau compatible to run,
contain the correct opcodes, lineinfo, etc
You also missed two other methods, a CLVM (custom lua virtual machine) and a lua wrapper. Bytecode conversion is more known as bytecode compilation, as bytecode conversion isn’t possible how it was back before Roblox used measures to prevent it. People also just write compilers that use bytecode, and fully support Luau syntax.
There is also many checks,
known as retcheck “return check”, memcheck, “memory check”, trustcheck which is to do with https services, but there is more.
LBI = lua bytecode interpreter.
A lua wrapper is very reliant on Roblox’s base, alongside proto conversion - bytecode compilation / clvm / lbi aren’t as much.
A CLVM is not easy work and requires a lot of work,
this is what Synapse X is.
In short a clvm is essentially written exactly like Roblox, and can be customised a lot more. But it’s hardly touchable by Roblox and not easy to patch; but this is now easier considering Luau is open source.
Roblox Luau opcodes have different registers within them too, compared to normal Lua ones.
They are placed in different orders, and some contain a little check. Like OP_TALICALL.
I’m pretty sure they shuffle / shuffled the enum too.
Every update they also change the address of many checks, etc.
I won’t go far in depth as I could potentially feed other users to create exploits.
I’m telling this information for educational purposes only.