FARGOS/VISTA
FARGOS/VISTAâ„¢ is the unique technology upon which most of FARGOS Development, LLC's offerings are based. It provides a
transparently distributed, high-performance, multi-threaded, architecture-neutral, object-oriented, peer-to-peer environment that
runs on a variety of operating systems and hardware platforms. While it is technology that is continuously being enhanced, it
benefits from a decade of research and deployment experience with advanced peer-to-peer systems. The history and meaning of the
FARGOS/VISTA acronym is discussed here.
FARGOS/VISTA is used by programmers to easily build and maintain complex, robust distributed systems that run in a global,
multi-lingual environment. The standard FARGOS/VISTA runtime supports deployment of architecture-neutral object code (compile to one object
file, use anywhere), persistent objects, an integrated HTTP server, and browsing of objects (regardless of location) using
a web browser. Dynamic loading of platform-specific object code is supported if the underlying host operating system has the
capability. A variety of profiling statistics are automatically maintained (see FARGOS/VISTA System Information Attributes for details).
If you need to build distributed applications, FARGOS/VISTA is definitely something you should use. While not an exhaustive
list, FARGOS/VISTA addresses the following issues:
- support for independent development
- FARGOS/VISTA is designed to enable the utilization of code written by different developers without requiring the exchange
of header files. A developer can correct or enhance a piece of code and the applications that utilize it do not need to be
recompiled or re-linked.
- high-performance multi-threading
- While native operating systems have process creation rates on the order of 20 per second, the multi-threading support
within the FARGOS/VISTA Object Management Environment achieves thread creation rates of several thousands of threads per
second.
- polymorphism and allomorphism
- FARGOS/VISTA permits a class to inherit from more than one class (i.e., multiple inheritance). This enables a programmer to
add capabilities to her application merely by inheriting a class that provides the needed functionality. Allomorphism removes
the need for common base classes and permits applications to provide and make use of services that share no common features
other than a method prototype.
- name spaces and versioning
- Collisions with code developed by other organizations is avoided through the use of name spaces; locally developed versions
of classes can also replace standard facilities. Versioning permits more than one version of a class to be operational at the
same time. This enables non-stop operation, eliminates the need for simultaneous upgrading of all members of a distributed
system, on-demand upgrades of persistent data, etc.
- security
-
FARGOS/VISTA provides access control as fine as per object/per user/per method. By default, an object can only be accessed by
the user who created it. All interprocess communication is encrypted using randomly-generated 128-bit session keys by
Rijndael, the NIST-selected algorithm for the Advanced Encryption
Standard.
- method overloading
- A specific methods can be invoked based on its name and the types of arguments that were passed; a default version of the
method can process argument combinations that were not explicitly handled (this is actually the most common usage).
- self-describing environment
- The type of every item of data can be examined at runtime. Applications can retrieve the meta information for each object,
such as class name, version Id, instance variable names and types.
- reflection
-
Per-object and
per-class meta objects can be set, which causes method invocations to be handled by another application within the
FARGOS/VISTA Object Management Environment. This powerful and flexible capability can be used to introduce bug fixes into
running systems or fix code for which the source is not available. Applications that need to intercept arbitrary (and thus
unknown) method invocations against an object are trivially implemented using meta-objects. Some examples include debugging
(e.g., tracing method invocations), on-demand conversion of persistent data, forwarding invocations to another process.
- dynamically-loaded code
-
All FARGOS/VISTA Object Management Environments support the dynamic loading of OIL2 Architecture Neutral Format (OIL2 ANF) object
code. On platforms that support it, native object code can also be dynamically loaded. While
dynamically loadable modules are normally loaded when a FARGOS/VISTA Object Management Environment process begins execution,
new code can actually be loaded at any time. This enables deployment of new applications or bug fixes without requiring a
restart.
- intrinsic support for internationalization
- A global distributed system will permit users to access servers residing in different countries. With conventional
technologies, messages generated by a server will appear in the language of its locale. If the user accessing the server
resides in a different country, the server-generated message will quite probably not be in the same locale as the user. For
example, users in France and Italy who access a server in Germany would receive messages in German, rather than the French and
Italian they would prefer to see, respectively. FARGOS/VISTA handles this issue, plus the problem of enabling computer programs
to understand messages (useful for automated system management applications), through its support of a special data type, the
Native Language Message.
- documentation
- Documentation can be maintained with OIL2 source code, permitting programmers to document and comment their source at the
time it is written. This provides several benefits since it encourages programmers to make the effort to document their code by
eliminating overhead created by the redundancy involved in documenting source code (so that other programmers can perform
maintenance) and creating programmer reference manuals, so that other programmers can use the interfaces. The OIL2 compiler
automatically generates the relevant structure and elements such as class and method names, descriptions and prototypes. Since
the documentation is co-located with the source, the documentation can be kept up-to-date at the time of any subsequent
modifications.
Further elaboration is available in the somewhat more in-depth overview of FARGOS/VISTA. That overview is intended to be accessible to
both practicing programmers and managers. It is hoped that those who take the time to read the technical overview will realize
that FARGOS/VISTA provides solutions to issues that most products have never considered.
Demonstrations and Documentation
Anyone interested is cordially invited to visit the download page and retrieve a copy of the FARGOS/VISTA Software
Development Kit for their computer along with any interesting reference manuals. The only prerequisite is the text
editor of your choice.
If you are a novice programmer or have never programmed before, take a look at the document "An Introduction to
Programming using OIL2".
The "OIL2 Reference Manual" and "FARGOS/VISTA Object Management Environment Programmer's Reference" are two
other documents that all FARGOS/VISTA developers should download. Each package of the FARGOS/VISTA Software Development Kit includes a copy of the Object Management Environment class documentation.
All programmers are strongly encouraged to examine the document "FARGOS/VISTA Examples", which provides a rich set of
complete examples that cover a wide range of topics. It is hoped that readers will find the annotated source code in this
document inspirational: a small amount of code can yield very sophisticated results. Sample source code for a variety of
applications is available on the OIL2 and C++ Example Source Code page.
Users who desire to develop an application that integrates with the HTTP server will find additional documentation in the
"FARGOS/VISTA HTTP Server Programmer's Guide".
Platform |
Availability |
Notes |
Linux (32-bit ARM) |
Now |
Hints on configuring a DE10-Nano
|
Linux (64-bit ARM) |
Now |
Hints on installing Fedora Core 30 on a Raspberry Pi 3B+
|
Linux (64-bit x64) |
Now |
|
Linux (64-bit IBM zSeries) |
Now |
|
macOS X (64-bit x86_64) |
Now |
|
Windows Vista/7/8/10 |
Now (95/98/ME dropped January 2012; NT 4, 2000, XP dropped 2019) |
|
OpenBSD (64-bit Intel) |
Now |
Our enthusiasm for this platform has declined over the years. It is still one of the safest choices for servers exposed
to the unvarnished Internet, but we have not forgotten being burned by bugs long ago, its slowness to support multiple cores
and it has become ever more annoying to deal with its quirks. Due to its use of a very obsolete g++, releases are
compiled with clang++. |
Solaris (64-bit SPARC) |
Withdrawn |
If only Oracle had been a better steward. |
Solaris (Intel x86) |
Withdrawn |
|
Pricing
The FARGOS/VISTA runtime is licensed based on the maximum number of interconnected hosts that
are permitted to form the distributed system. Each FARGOS/VISTA Software Development Kit includes a license that is limited to a
maximum of two hosts to permit no-cost for evaluation and the implementation of conventional client/server-type applications.
Arbitrary inquiries may also be sent directly to sales@fargos.net.