The Lounge is rated Safe For Work. If you're about to post something inappropriate for a shared office environment, then don't post it. No ads, no abuse, and no programming questions. Trolling, (political, climate, religious or whatever) will result in your account being removed.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
Rating helpful answers is nice, but saying thanks can be even nicer.
One of the main advantages of C# and Java is their use of a virtual machine. It abstracts the dependency on the underlying hardware. But dont containers also do that by allowing us to have whatever OS we want independent of the underlying operating system OS ? So why do we continue to use VMS in a world of containers ? And if the use of VMS goes , does that mean the writing is on the walls for languages that use them, such as C# and Java, or will we simply see a move away from the vm and revert to having the code more tightly coupled to the underlying OS ?
If "abstracting the dependency on the underlying hardware" is the criterium for a VM, then PDF readers are VMs, and even some word processors -- in fact, it could be said that anything that transports commands to OS peripheral interfaces is a VM.
For me, being in a purist mood, a VM has to effectively sidestep the underlying OS of the computer, by running files on a different OS on top of the underlying OS.
Do C# and Java do this? Not so far as I know, they don't; they may abstract things a tiny bit further than a PDF reader does, but it's still only abstraction.
They are programs that allow you to open, run, and use certain files.
Notepad does that much, for Heaven's sake!
So stop calling spades shovels, and the "problem" highlighted by the article disappears.
I wanna be a eunuchs developer! Pass me a bread knife!
Of course they do it , the code is compiled to intermediate language in .net and that is executed in the runtime virtual machine. It is this virtual machine that may be impacted in the case of code running in containers since the software environment is now controlled. The hardware isnt, but the software is .
In that case are the benifits of using the runtime virtual machine as compelling . Of course not all code runs in containers, and it never will, but in the case of containers are there any advantages that can be gained by having control over the software enviornment? Potentially do we need the VM in its current form (in containerised apps) .
If we dont ( and I am not saying we dont I am mulling over the question) but if we dont need the VM then isnt that a bit of a kick in the teeth for languages that use a VM such as c#,vb.net, java, python etc. Will we see an emergence of a language more suited to containerised apps?
the code is compiled to intermediate language in .net and that is executed in the runtime virtual machine. It is this virtual machine that may be impacted in the case of code running in containers since the software environment is now controlled. The hardware isnt, but the software is .
I'd call that a sandbox.
To me, a VM has to allow the hardware and peripherals to be governed by a different OS (or another instance of the same OS).
I wanna be a eunuchs developer! Pass me a bread knife!
In all honesty many people replying have been banging on about VMS (or VMs for the pedants) as if I was talking about the traditional virtual server. I'm not, I am talking about the run time virtual machines integral to program execution in many languages. Not really a sandbox , they are referred to by the term virtual machine , hence the confusion. My bad for not being clearer.
That doesn't make any sense, they're completely different things.
Both containers and VMs can run C# and Java applications, but not vice versa.
C# ad Java can be used to create new applications, while VMs and containers, well, can't because they're very different things.
VMs can be used for work computers, servers, sandboxes, etc. and give you a complete OS on top of your OS.
Containers just run a piece of (non-UI) software on the existing OS.
If you really have to ask this I suggest you do some reading on the topics.
Well, JVM/dotNET do virtualize some aspects - they are virtualization techniques. You can say the same about a lot of computer concepts: Any compiler virtualizes the instruction set of the CPU. A file system driver creates virtual storage unit where you don't have to handle sectors and track and surfaces. And so on.
I see a lot of computer people that seem to think that virtualization is one specific thing: Creating a complete virtual hardware CPU / memory / IO environment. If you don't provide all of that Hyper-V or VMware provides, it is not virtualization. If you provide something not found in Hyper-V/VMware, then it it has nothing to do with virtualization.
I beg to differ. Virtualization can cover an arbitrary set of virtualized aspects. Bytecodes is one aspect. Memory paging is another. File system drivers is a third. Yes, you are right that containers can run C# applications but not vice versa. You could say something similar: A file system driver can be realized in byte code but a byte code interpreter cannot be realized by a file system driver, so they are completely different things. Yet both are virtualizations.
I have been arguing with Docker gurus who consistently insist that containers are NOT virtualization! But Docker does create virtual networks, a virtual address space, virtual disks... It is not the entire set of VMware virtualizations, but ... No, Docker gurus insist that Docker is lightweight, efficient, nothing like resource hogs like VMware/Hyper-V! Whatever Docker does must be called something else - even if it is exactly the same as virtualization.
So even people who are working with such issues more or less full time do not have a comprehensive understanding of what virtualization is in a more general sense, but stick to specific instances of it. It should come as no surprise that a less experienced fellow have problems keeping things straight
I was talking about the run time virtual machines that the languages use to execute the IM. Assuming I am running in a container (and of course not everything does) and have complete control of the software enviornment doesnt that take away operating system uncertainties, leaving the hardware to be abstracted. In which case do we need to use a virtual machine at runtime ? Of course that tightly couples the code to a specific run time environment which is not ideal so that would be a good argument not to.
In that case I see what you mean in that it could replace the JVM, although that's likely not going to happen anytime soon.
There are a few problems.
One, as you mention, containers run on the OS while VMs can have their own OS.
Second, so far, running UI applications in containers isn't possible (well, I think it is, but you'll have to go through a lot of trouble and do some hacking and tweaking).
For that reason, I don't think containers will replace VMs, they do different things and have different purposes, even though one looks like the other.
.NET code doesn't run in a virtual machine, as far as I know.
Instead, .NET's IL is compiled by a JIT compiler into machine code.
The JIT compiler is just an application running directly on the user's machine.