The problem is running multiple CPU bound processes on a single server. Cloud systems are great for stuff requiring storage. It's super easy to make a 1 Tb disk look like one hundred 10 Gb disks. The way files are used and the way storage systems are designed, it's transparent to the user that their 10 Gb "disk" is really a VM's fake hard drive.
But it's not possible to do the same thing with the CPU when any of the users are running CPU bound computations. Performance would be terrible. It's particularly bad for Matlab/Octave because they can take advantage of multi-core CPUs. For a lot of stuff the problem could be alleviated by giving each user their own CPU core, but with Matlab it would mean their code is running 1/8th the speed they could get if they ran it locally.
The problem is running multiple CPU bound processes on a single server. Cloud systems are great for stuff requiring storage. It's super easy to make a 1 Tb disk look like one hundred 10 Gb disks. The way files are used and the way storage systems are designed, it's transparent to the user that their 10 Gb "disk" is really a VM's fake hard drive.
But it's not possible to do the same thing with the CPU when any of the users are running CPU bound computations. Performance would be terrible. It's particularly bad for Matlab/Octave because they can take advantage of multi-core CPUs. For a lot of stuff the problem could be alleviated by giving each user their own CPU core, but with Matlab it would mean their code is running 1/8th the speed they could get if they ran it locally.