I have heard of several things, quoted from Wikipedia:
-
A JVM is distributed along with a set of standard class libraries that implement the Java application programming interface (API). Appropriate APIs bundled together form the Java Runtime Environment (JRE).
-
Adobe Integrated Runtime, also known as Adobe AIR, is a cross-platform runtime environment developed by Adobe Systems for building Rich Internet Applications (RIA) using Adobe Flash, Adobe Flex, HTML, and Ajax, that can be run as desktop applications.
-
The .NET Framework (pronounced dot net) is a software framework for Microsoft Windows operating systems. It includes a large library, and it supports several programming languages which allows language interoperability (each language can use code written in other languages). The .NET library is available to all the programming languages that .NET supports.
As described above, if I understand correctly, the first two seem to be related to "runtime environment", but there is no related Wikipedia to explain what "runtime environment" is.
The third is said to be a "Software framework", which has a Wikipedia article as:
a software framework is an abstraction in which common code providing generic functionality can be selectively overridden or specialized by user code, thus providing specific functionality. Frameworks are a special case of software libraries in that they are reusable abstractions of code wrapped in a well-defined Application programming interface (API), yet they contain some key distinguishing features that separate them from normal libraries.
So my questions are:
- Are "Runtime Environment" and "Software framework" the same thing? If not, how do they differ, and do they belong to some common category?
- Are they all programming libraries/APIs that can be used by programmers to develop their own software?
- The three examples are often required when installing some software. Do they belong to the concept of virtual machine? If not, what category do they belong to? How is that category different from virtual machine?
Thanks and regards!
PS: I don't know if this post is more suitable for superuser or for stackoverflow, as the three examples are often required when installing some software, and they are also seem to be providing API for software developers.
No, not really. The "runtime environment" is typically referring to the core technology that actually executes the code itself. In Java, this would be the JVM - in .NET, the CLR. The "framework" typically refers to the suite of libraries that are distributed by default.
This is more of the "framework" - the "Framework" provides the APIs available by default.
A Virtual Machine is a form of "runtime environment" - this is what Java and C# uses for their runtime environment.
The confusion arises since you typically install both things together - as a runtime environment is of little use without some basic libraries (the framework), and a framework does nothing without a runtime environment (since the latter is required to execute code based on the framework).
No. A runtime environment basically is a virtual machine that runs on top of a machine - provides machine abstraction. It is generally lower level than a library. A framework can contain a runtime environment, but is generally tied to a library.
Java, AIR and .NET (in this case the Common Language Runtime) has each its own runtime in a certain byte code that runs on top of the operating system. It allows the code to be quite portable without recompilation to do it this way.
Libraries and APIs are used for making new programs. A runtime environment is where the programs run.
A runtime environment does coincide with the concept of a virtual machine, albeit not as complex as VMWare or otherwise. They both share the goal of abstracting the underlying systems to a point that other software can run on it.