Being a virtual machine everything is virtual so you are making a virtual CPU. And since there is this whole platform underneath you can decide what you want to do with that. You can map one to an operating system thread or you can map one and three of its friends to one operating system thread and schedule it. You can map all of them to one; you can do whatever you want. And depending on the hardware or depending on the work load you might make different decisions about using native threads or green threads or whatever. There is a whole universe of decisions you can make all the way from the way Erlang does it to the way Ruby 1.8 does it, to the way Java does it and they each go for different things. If there was one that was perfect for everything people would have just picked it.The Ruby source to Rubinius bytecode compiler (which had just been rewritten prior to this interview) is another big topic, with Wilson giving an in-depth explanation of the problems of compiling the trickier Ruby language constructs. Virtual Machine design aspects also come up in the interview, such as the Smalltalk Blue Book, upon which the Rubinius design is based:
The Smalltalk blue book has a concept called primitives which are not CPU instructions but are methods that are implemented inside the virtual machine at a level much lower than a regular method. And you do it when you need something to be efficient or you needed to talk to the platform in a way that you feel ready to expose or whatever. There are various reasons to do it. And I know our list of primitives is completely different from the set that is in the blue book at this point.Wilson is also a member of the Ruby Hit Squad, which gathered in 2007 to write Vlad, The Deployer, a simpler competitor to the popular deployment tool Capistrano. The idea behind Vlad and that prompted it's creation are explained.
Watch Wilson Bilkovich Discusses Rubinius.