Do containers mark the beginning of the end for VMS and possibly C# and Java ?
-
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 ?
-
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!
-
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 ?
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.
Best, Sander sanderrossel.com Migrating Applications to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly
-
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 ?
The best known container solution, Docker, is primarily suited for back end servers, command line interface. You may run a web server in a container, to get sort of a GUI interface, but at a performance, and with a functionality/flexibility far below what you would expect from a native GUI application. Also, HTML specs are so fuzzy that we are still fighting with browser incompatibilities. Now that we no longer have IE6 as a scapegoat, noone wants to reveal that there are, and have always been, incompatibilities among the other browsers. (It seems to be much more proper to say "Can't you just tell your users to use Google Chrome?" than it was to say "Can't you just tell your users to use IE6?", even though the logic is the same.) You can run an X.11 client in a Docker container, but X.11 servers (i.e. front ends - X.11 terminology is somewhat strange) are not very widespread nowadays, in particular in Windows environments. X.11 handles mouse/screen only; any other I/O requires a different model. Adapting a GUI application from almost any other framework to X.11 is likely to require a major rewrite. Docker is essentially a *nix thing. The interface with the host is very much according to *nix structure and philosophy. There is a Windows Docker, but the MS guys had to give up mapping all Windows functions onto that *nix host interface, and made their own. But this host interface is way from stable, and is updated with every new Windows release, so every half year you have to rebuild all your Windows Docker images fit the new host OS version. Not much virtualization there... And even with that Windows specific host interface, you can only run CLI windows applications - no GUI. (Windows Docker can run Linux containers, though, but of course not the other way around: The Linux community won't touch the Windows variant with a ten foot pole.) Even if you stick to Linux: Docker provides no virtualization of the CPU. The executable code is "bare", and run directly on the CPU. You can't run 64 bit code on a 32 bit CPU, or an ARM container on an Intel CPU. A container is exactly identical every time it starts up. It has a file system, but any changes made during execution are temporary, disappearing when the container terminates. You cannot set preferences, maintain a list of last files processed etc. in the container; all data to modified permanently must be maintained outside the container, either by mapping a host directory at run time (which creates certain problems with OSes differing from
-
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.
Best, Sander sanderrossel.com Migrating Applications to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly
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 :-)
-
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 :-)
Agreed on everything, but we weren't discussing the strict meaning of virtualization ;) The question was if containers will mark the end of VMs, and the answer is no because they are different things. Or, to speak in your terms, they virtualize different things :)
Best, Sander sanderrossel.com Migrating Applications to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly
-
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 ?
VMS is still alive and well, thanks. HP is maintaining it.
-
VMS is still alive and well, thanks. HP is maintaining it.
I manfully resisted the urge to go full-bore grammar-fascist and insist that "VM's" was the proper plural form. I am a former VAX/VMS system manager from the VMS 3.x days when men were men, women were women, and disk drives were the size of washing machines.
Software Zen:
delete this;
-
I manfully resisted the urge to go full-bore grammar-fascist and insist that "VM's" was the proper plural form. I am a former VAX/VMS system manager from the VMS 3.x days when men were men, women were women, and disk drives were the size of washing machines.
Software Zen:
delete this;
Surely you mean "VMs" unless you are referring to something they possess. From 1989 to 2002, along with doing development, I was a system manager for various systems running 5.x, 6.x, and 7.x . And don't forget to mention 9-track tape reels. Now I have four small OpenVMS systems purchased via Ebay running versions 7.2 (AlphaServer 800), 7.3 (MicroVAX 3100), 8.3 (AlphaServer DS10L), and 8.4 (Integrity rx1620, Itanium) to keep from getting too rusty.
-
Agreed on everything, but we weren't discussing the strict meaning of virtualization ;) The question was if containers will mark the end of VMs, and the answer is no because they are different things. Or, to speak in your terms, they virtualize different things :)
Best, Sander sanderrossel.com Migrating Applications to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly
-
Agreed on everything, but we weren't discussing the strict meaning of virtualization ;) The question was if containers will mark the end of VMs, and the answer is no because they are different things. Or, to speak in your terms, they virtualize different things :)
Best, Sander sanderrossel.com Migrating Applications to the Cloud with Azure arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly
-
Surely you mean "VMs" unless you are referring to something they possess. From 1989 to 2002, along with doing development, I was a system manager for various systems running 5.x, 6.x, and 7.x . And don't forget to mention 9-track tape reels. Now I have four small OpenVMS systems purchased via Ebay running versions 7.2 (AlphaServer 800), 7.3 (MicroVAX 3100), 8.3 (AlphaServer DS10L), and 8.4 (Integrity rx1620, Itanium) to keep from getting too rusty.
-
I manfully resisted the urge to go full-bore grammar-fascist and insist that "VM's" was the proper plural form. I am a former VAX/VMS system manager from the VMS 3.x days when men were men, women were women, and disk drives were the size of washing machines.
Software Zen:
delete this;
-
Surely you mean "VMs" unless you are referring to something they possess. From 1989 to 2002, along with doing development, I was a system manager for various systems running 5.x, 6.x, and 7.x . And don't forget to mention 9-track tape reels. Now I have four small OpenVMS systems purchased via Ebay running versions 7.2 (AlphaServer 800), 7.3 (MicroVAX 3100), 8.3 (AlphaServer DS10L), and 8.4 (Integrity rx1620, Itanium) to keep from getting too rusty.
PIEBALDconsult wrote:
Surely you mean "VMs" unless you are referring to something they possess.
This is probably one of those cases where I'm showing my age. For me the plural form of an acronym was always ACRONYM's. Hmm. Applying the "Google is your friend" rule, it seems we're both right/wrong: FAQs on Style - The New York Times[^] If you write an abbreviation as C.P.A., the plural form is C.P.A.'s. If you write it as CPA, the plural is CPAs. Learn something new every day.
Software Zen:
delete this;
-
PIEBALDconsult wrote:
Surely you mean "VMs" unless you are referring to something they possess.
This is probably one of those cases where I'm showing my age. For me the plural form of an acronym was always ACRONYM's. Hmm. Applying the "Google is your friend" rule, it seems we're both right/wrong: FAQs on Style - The New York Times[^] If you write an abbreviation as C.P.A., the plural form is C.P.A.'s. If you write it as CPA, the plural is CPAs. Learn something new every day.
Software Zen:
delete this;
Well, it's only an acronym if it's pronounced ( e.g. RAM ) otherwise, it's initialization ( e.g. CPU ). An apostrophe is never used for pluralization.
greengrocer's apostrophe : An incorrectly used apostrophe, especially one mistakenly used to form the plural of a noun,
Similarly, I expect that headline writers have traditionally used such nonsense in order to write plurals in ALL CAP'S -
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 ?
Hmm, I have a colleague who is a great believer in containers. However, I have yet to find any use case for them in my work, even though I use VMs extensively and have done for many, many years. It has been a very long time since any of the true hypervisors have consumed significant amounts of the hosts available resources (certainly the bare metal ones anyway, like ESX) and the sheer hassle of coming up with a working Docker image of my dev environment say, that I can replicate easily between my various workplaces and machines is much greater the just cloning a complete VM and spinning it up, and for on-going development I just use Nextcloud to replicate the work between multiple (virtual and/or physical) machines to make sure they all keep in step, and write occasional updates to my GIT repository by way of additional backup (itself running in a linux VM that is hosted on one of my ESXi hosts - that also hosts my DC, my SQL server, a mail server for some of my clients, a 3CX phone exchange and a Nextcloud instance that I and some of my clients use - all on an old I7 with 32Gb RAM). I use VMs to replicate the entire working structure of one of my clients, so I can develop in a replica of their production environment without risk to their setup and yet be confident that when I deploy, things will work. Despite the incredible hype surrounding Docker (and to some extend Kubernetes) I have yet to find any instance when Docker was a better fit for me. My colleague, despite insisting that containers would be much better and more productive, has never been able to explain exactly how it would help me. So my answer is "No" 8)
-
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 ?
> But dont containers also do that by allowing us to have whatever OS we want independent of the underlying operating system OS ? NOT. Container completely depends from underlying OS. If you made program on Win7, you have to deploy container image on the same OS. Opposite to compiled C# program, which can work ANYWHERE where you installed .NET (what is way smaller than a whole OS).
-
The best known container solution, Docker, is primarily suited for back end servers, command line interface. You may run a web server in a container, to get sort of a GUI interface, but at a performance, and with a functionality/flexibility far below what you would expect from a native GUI application. Also, HTML specs are so fuzzy that we are still fighting with browser incompatibilities. Now that we no longer have IE6 as a scapegoat, noone wants to reveal that there are, and have always been, incompatibilities among the other browsers. (It seems to be much more proper to say "Can't you just tell your users to use Google Chrome?" than it was to say "Can't you just tell your users to use IE6?", even though the logic is the same.) You can run an X.11 client in a Docker container, but X.11 servers (i.e. front ends - X.11 terminology is somewhat strange) are not very widespread nowadays, in particular in Windows environments. X.11 handles mouse/screen only; any other I/O requires a different model. Adapting a GUI application from almost any other framework to X.11 is likely to require a major rewrite. Docker is essentially a *nix thing. The interface with the host is very much according to *nix structure and philosophy. There is a Windows Docker, but the MS guys had to give up mapping all Windows functions onto that *nix host interface, and made their own. But this host interface is way from stable, and is updated with every new Windows release, so every half year you have to rebuild all your Windows Docker images fit the new host OS version. Not much virtualization there... And even with that Windows specific host interface, you can only run CLI windows applications - no GUI. (Windows Docker can run Linux containers, though, but of course not the other way around: The Linux community won't touch the Windows variant with a ten foot pole.) Even if you stick to Linux: Docker provides no virtualization of the CPU. The executable code is "bare", and run directly on the CPU. You can't run 64 bit code on a 32 bit CPU, or an ARM container on an Intel CPU. A container is exactly identical every time it starts up. It has a file system, but any changes made during execution are temporary, disappearing when the container terminates. You cannot set preferences, maintain a list of last files processed etc. in the container; all data to modified permanently must be maintained outside the container, either by mapping a host directory at run time (which creates certain problems with OSes differing from
-
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 ?
.NET doesn't even use a VM. 🤣
-
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 ?
You're kinda hovering on the idea, but it was close but not cigar. Java and .NET Core (not really C#) are meant to be platform agnostic as they compile themselves to an Intermediate Language (bytecode for Java and CIL for .NET) before being executed by their runtimes. All other hardware is seen through a Hardware Abstraction Layer (HAL) which hides the details and intricacies from the software. VMWare and EC2, on the other hand, abstract a full PC environment into a virtual solution which also includes the operating system. Is this last component that really makes a differences and the reason this solutions will never go away. Docker on the other hand is simply a simulation created on Linux to trick software into thinking that they are isolated from the hardware, but actually are just a Linux process shielded with lots of tags and chroots. This does not make the binary portable nor it creates a full operating system, but rather uses the OS from the host. Malware loves this approach and that's the reason it can't be used on dubitable loads. I guess in the end, Docker will change things and Java (or any equivalent) in the future, will look more like Docker, where you'll both create the Java Virtual Machine and a Docker container to accompany it, with a single command aka
java container start com.example.HelloWorld -baseimage ubuntu:breezy