VNC ( Virtual Network Computing ) is a graphical desktop-sharing system that uses the Remote Frame Buffer protocol (RFB) to remotely control another computer . It transmits the keyboard and mouse input from one computer to another, relaying the graphical- screen updates, over a network . Popular uses for this technology include remote technical support and accessing files on one's work computer from one's home computer, or vice versa.
56-428: VNC is platform-independent, with clients and servers for many GUI-based operating systems and for Java . Multiple clients may connect to a VNC server at the same time. There are a number of variants of VNC which offer their own particular functionality; e.g., some optimised for Microsoft Windows , or offering file transfer (not part of VNC proper), etc. Many are compatible (without their added features) with VNC proper in
112-546: A thin client called the Videotile, which also used the RFB protocol. The Videotile had an LCD display with pen input and a fast ATM connection to the network. At the time, network computer was commonly used as a synonym for a thin client; VNC is essentially a software-only (i.e. virtual) network computer. In 1999, AT&T acquired the lab, and in 2002 closed down the lab's research efforts. Following this, several members of
168-456: A 64-bit OS. The primary advantage of running Java in a 64-bit environment is the larger address space. This allows for a much larger Java heap size and an increased maximum number of Java Threads, which is needed for certain kinds of large applications; however there is a performance hit in using 64-bit JVM compared to 32-bit JVM. The JVM has a garbage-collected heap for storing objects and arrays. Code, constants, and other class data are stored in
224-829: A JVM, Java applets are not restricted to the Java programming language; any language targeting the JVM may run in the plug-in. A restricted set of APIs allow applets access to the user's microphone or 3D acceleration, although applets are not able to modify the page outside its rectangular region. Adobe Flash Player , the main competing technology, works in the same way in this respect. As of June 2015 according to W3Techs, Java applet and Silverlight use had fallen to 0.1% each for all web sites, while Flash had fallen to 10.8%. Since May 2016, JavaPoly allows users to import unmodified Java libraries, and invoke them directly from JavaScript. JavaPoly allows websites to use unmodified Java libraries, even if
280-455: A Java plug-in , nor do they permit side-loading any non- Flash plug-in. The Java browser plugin was deprecated in JDK 9. The NPAPI Java browser plug-in was designed to allow the JVM to execute so-called Java applets embedded into HTML pages. For browsers with the plug-in installed, the applet is allowed to draw into a rectangular region on the page assigned to it. Because the plug-in includes
336-574: A Unix user's current desktop if it is served with x11vnc , or to a separate X11 session if one is served with TightVNC . From Unix, TightVNC will connect to a Mac OS X session served by Apple Remote Desktop if the VNC option is enabled, or to a VNC server running on Microsoft Windows. Other programs or software libraries which implement VNC include Krfb , Libvncserver , PocketVNC , Remmina , TigerVNC , TightVNC , VirtualGL , and Vinagre . Java Virtual Machine A Java virtual machine ( JVM )
392-463: A basic HTTP server on port 5800+ N to provide a VNC viewer as a Java applet , allowing easy connection through any Java-enabled web-browser. Different port assignments can be used as long as both client and server are configured accordingly. A HTML5 VNC client implementation for modern browsers (no plugins required) exists too. Although possible even on low bandwidth, using VNC over the Internet
448-672: A bootstrap class loader that is capable of loading trusted classes, as well as an extension class loader or application class loader. The Java virtual machine specification does not specify how a class loader should locate classes. The JVM operates on specific types of data as specified in Java Virtual Machine specifications. The data types can be divided into primitive types ( integers , Floating-point, long etc.) and Reference types. The earlier JVM were only 32-bit machines. long and double types, which are 64-bits , are supported natively, but consume two units of storage in
504-550: A compiler. The JVM has instructions for the following groups of tasks: The aim is binary compatibility. Each particular host operating system needs its own implementation of the JVM and runtime. These JVMs interpret the bytecode semantically the same way, but the actual implementation may be different. More complex than just emulating bytecode is compatibly and efficiently implementing the Java core API that must be mapped to each host operating system. These instructions operate on
560-506: A fixed stack location, allowing the JIT compiler to transform stack accesses into fixed register accesses. Because of this, that the JVM is a stack architecture does not imply a speed penalty for emulation on register-based architectures when using a JIT compiler. In the face of the code-verified JVM architecture, it makes no difference to a JIT compiler whether it gets named imaginary registers or imaginary stack positions that must be allocated to
616-512: A frame's local variables or operand stack, since each unit is 32 bits. boolean , byte , short , and char types are all sign-extended (except char which is zero-extended ) and operated on as 32-bit integers, the same as int types. The smaller types only have a few type-specific instructions for loading, storing, and type conversion. boolean is operated on as 8-bit byte values, with 0 representing false and 1 representing true . (Although boolean has been treated as
SECTION 10
#1732791129605672-521: A physical screen. Alternatively, a machine (which may be a workstation or a network server) with screen, keyboard, and mouse can be set up to boot and run the VNC server as a service or daemon, then the screen, keyboard, and mouse can be removed and the machine stored in an out-of-the way location. Users commonly deploy VNC as a cross-platform remote desktop system. For example, Apple Remote Desktop for Mac OS X (and " Back to My Mac " in versions 10.5 through 10.13) interoperates with VNC and will connect to
728-434: A proxy, or through a VNC repeater (useful in presence of a NAT). In addition, the display that is served by VNC is not necessarily the same display seen by a user on the server. On Unix/Linux computers that support multiple simultaneous X11 sessions, VNC may be set to serve a particular existing X11 session, or to start one of its own. It is also possible to run multiple VNC sessions from the same computer. On Microsoft Windows
784-433: A set of common abstracted data types rather the native data types of any specific instruction set architecture . A JVM language is any language with functionality that can be expressed in terms of a valid class file which can be hosted by the Java Virtual Machine. A class file contains Java Virtual Machine instructions ( Java byte code ) and a symbol table, as well as other ancillary information. The class file format
840-443: A small portion of the screen changes from one frame to the next (as when a mouse pointer moves across a desktop, or when text is written at the cursor), but bandwidth demands get very high if a lot of pixels change at the same time (such as when scrolling a window or viewing full-screen video). VNC by default uses TCP port 5900+ N , where N is the display number (usually :0 for a physical display). Several implementations also start
896-552: A specification and implemented in a register based virtual machine is the Common Language Runtime . The original specification for the bytecode verifier used natural language that was incomplete or incorrect in some respects. A number of attempts have been made to specify the JVM as a formal system. By doing this, the security of current JVM implementations can more thoroughly be analyzed, and potential security exploits prevented. It will also be possible to optimize
952-421: A specification. It is a part of the Java runtime environment. The garbage collection algorithm used and any internal optimization of the Java virtual machine instructions (their translation into machine code ) are not specified. The main reason for this omission is to not unnecessarily constrain implementers. Any Java application can be run only inside some concrete implementation of the abstract specification of
1008-493: A stack like a typical interpreter. In many aspects the HotSpot Interpreter can be considered a JIT compiler rather than a true interpreter, meaning the stack architecture that the bytecode targets is not actually used in the implementation, but merely a specification for the intermediate representation that can well be implemented in a register based architecture. Another instance of a stack architecture being merely
1064-436: A type since The Java Virtual Machine Specification, Second Edition clarified this issue, in compiled and executed code there is little difference between a boolean and a byte except for name mangling in method signatures and the type of boolean arrays. boolean s in method signatures are mangled as Z while byte s are mangled as B . Boolean arrays carry the type boolean[] but use 8 bits per element, and
1120-539: Is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode . The JVM is detailed by a specification that formally describes what is required in a JVM implementation. Having a specification ensures interoperability of Java programs across different implementations so that program authors using the Java Development Kit (JDK) need not worry about idiosyncrasies of
1176-460: Is designed to allow safe execution of untrusted code from remote sources, a model used by Java applets , and other secure code downloads. Once bytecode-verified, the downloaded code runs in a restricted " sandbox ", which is designed to protect the user from misbehaving or malicious code. As an addition to the bytecode verification process, publishers can purchase a certificate with which to digitally sign applets as safe, giving them permission to ask
SECTION 20
#17327911296051232-407: Is facilitated if the user has a broadband connection at both ends. However, it may require advanced network address translation (NAT), firewall and router configuration such as port forwarding in order for the connection to go through. Users may establish communication through virtual private network (VPN) technologies to ease usage over the Internet, or as a LAN connection if VPN is used as
1288-472: Is not secure as picture data is transmitted without encryption. To circumvent this, it should be tunneled through an SSH connection (see below). VNC may be tunneled over an SSH or VPN connection which would add an extra security layer with stronger encryption. An additional security concern for the use of VNC is to check whether the version used requires authorization from the remote computer owner before someone takes control of their device. This will avoid
1344-414: Is one line, or row, in a raster scanning pattern, such as a line of video on a cathode-ray tube (CRT) display of a television set or computer monitor . On CRT screens the horizontal scan lines are visually discernible, even when viewed from a distance, as alternating colored lines and black lines, especially when a progressive scan signal with below maximum vertical resolution is displayed. This
1400-403: Is sometimes used today as a visual effect in computer graphics . The term is used, by analogy, for a single row of pixels in a raster graphics image. Scan lines are important in representations of image data, because many image file formats have special rules for data at the end of a scan line. For example, there may be a rule that each scan line starts on a particular boundary (such as
1456-469: Is the hardware- and operating system-independent binary format used to represent compiled classes and interfaces. There are several JVM languages, both old languages ported to JVM and completely new languages. JRuby and Jython are perhaps the most well-known ports of existing languages, i.e. Ruby and Python respectively. Of the new languages that have been created from scratch to compile to Java bytecode, Clojure , Groovy , Scala and Kotlin may be
1512-411: Is the program that represents the screen data originating from the server, receives updates from it, and presumably controls it by informing the server of collected local input. The VNC protocol ( RFB protocol ) is very simple, based on transmitting one graphic primitive from server to client ("Put a rectangle of pixel data at the specified X,Y position") and event messages from client to server. In
1568-436: Is to extend the JVM so that it supports languages other than Java. A basic philosophy of Java is that it is inherently safe from the standpoint that no user program can crash the host machine or otherwise interfere inappropriately with other operations on the host machine, and that it is possible to protect certain methods and data structures belonging to trusted code from access or corruption by untrusted code executing within
1624-500: Is used for operands to run computations and for receiving the return value of a called method, while local variables serve the same purpose as registers and are also used to pass method arguments. Thus, the JVM is both a stack machine and a register machine . In practice, HotSpot eliminates every stack besides the native thread/call stack even when running in Interpreted mode, as its Templating Interpreter technically functions as
1680-708: The GNU General Public License . The Olivetti & Oracle Research Lab (ORL) at Cambridge in the UK developed VNC at a time when Olivetti and Oracle Corporation owned the lab. Developers who worked on VNC while at the AT&T Research Lab include Tristan Richardson (inventor), Andy Harter (project leader), Quentin Stafford-Fraser , James Weatherall and Andy Hopper . The name Virtual Network Computer/Computing (VNC) originated with ORL's work on
1736-503: The "method area". The method area is logically part of the heap, but implementations may treat the method area separately from the heap, and for example might not garbage collect it. Each JVM thread also has its own call stack (called a "Java Virtual Machine stack" for clarity), which stores frames . A new frame is created each time a method is called, and the frame is destroyed when that method exits. Each frame provides an "operand stack" and an array of "local variables". The operand stack
VNC - Misplaced Pages Continue
1792-420: The JVM by skipping unnecessary safety checks, if the application being run is proven to be safe. A virtual machine architecture allows very fine-grained control over the actions that code within the machine is permitted to take. It assumes the code is "semantically" correct, that is, it successfully passed the (formal) bytecode verifier process, materialized by a tool, possibly off-board the virtual machine. This
1848-730: The JVM bytecode, which is universal across JVM languages, allows building upon the language's existing compiler to bytecode. The main JVM bytecode to JavaScript transpilers are TeaVM, the compiler contained in Dragome Web SDK, Bck2Brwsr, and j2js-compiler. Leading transpilers from JVM languages to JavaScript include the Java-to-JavaScript transpiler contained in Google Web Toolkit , Clojurescript (Clojure), GrooScript (Apache Groovy), Scala.js (Scala) and others. Scanline A scan line (also scanline )
1904-417: The JVM has no built-in capability to pack booleans into a bit array , so except for the type they perform and behave the same as byte arrays. In all other uses, the boolean type is effectively unknown to the JVM as all instructions to operate on booleans are also used to operate on byte s.) However the newer JVM releases (OpenJDK HotSpot JVM) support 64-bit, so you can either have 32-bit/64-bit JVM on
1960-422: The Java Virtual Machine to make possible compatible clean-room implementations. Oracle provides tests that verify the proper operation of implementations of the Java Virtual Machine. One of Oracle's JVMs is named HotSpot; the other, inherited from BEA Systems , is JRockit . Oracle owns the Java trademark and may allow its use to certify implementation suites as fully compatible with Oracle's specification. One of
2016-577: The Java virtual machine. Starting with Java Platform, Standard Edition (J2SE) 5.0, changes to the JVM specification have been developed under the Java Community Process as JSR 924. As of 2006 , changes to the specification to support changes proposed to the class file format (JSR 202) are being done as a maintenance release of JSR 924. The specification for the JVM was published as the blue book , whose preface states: We intend that this specification should sufficiently document
2072-415: The RFB protocol is designed to be extensible. VNC clients and servers negotiate their capabilities with handshaking in order to use the most appropriate options supported at both ends. The VNC server is the program on the machine that shares some screen (and may not be related to a physical display: the server can be "headless" ), and allows the client to share control of it. The VNC client (or viewer)
2128-431: The VNC session served is always the current user session. In July 2014 RealVNC published a Wayland developer preview. By default, RFB is not a secure protocol. While passwords are not sent in plain-text (as in telnet ), cracking could prove successful if both the encryption key and encoded password were sniffed from a network. For this reason it is recommended that a password of at least 8 characters be used. On
2184-500: The development team (including Richardson, Harter, Weatherall and Hopper) formed RealVNC in order to continue working on open-source and commercial VNC software under that name. As of 2013, RealVNC Ltd claims the term "VNC" as a registered trademark in the United States and in other countries. The original GPLed source code has fed into several other versions of VNC. Such forking has not led to compatibility problems because
2240-411: The duty is on the viewer, which is useful if the server site has no computer expertise and the viewer user is more knowledgeable. The server sends small rectangles of the framebuffer to the client. In its simplest form, the VNC protocol can use a lot of bandwidth , so various methods have been devised to reduce the communication overhead. For example, there are various encodings (methods to determine
2296-514: The machine language of a real computer and programs written in other languages than Java can be compiled into Java bytecode. Java bytecode is intended to be platform-independent and secure. Some JVM implementations do not include an interpreter, but consist only of a just-in-time compiler. At the start of the Java platform's lifetime, the JVM was marketed as a web technology for creating Rich Web Applications . As of 2018 , most web browsers and operating systems bundling web browsers do not ship with
VNC - Misplaced Pages Continue
2352-414: The most efficient way to transfer these rectangles). The VNC protocol allows the client and server to negotiate which encoding they will use. The simplest encoding, supported by all clients and servers, is raw encoding , which sends pixel data in left-to-right scanline order, and after the original full screen has been transmitted, transfers only rectangles that change. This encoding works very well if only
2408-569: The most popular ones. A notable feature with the JVM languages is that they are compatible with each other , so that, for example, Scala libraries can be used with Java programs and vice versa. Java 7 JVM implements JSR 292: Supporting Dynamically Typed Languages on the Java Platform, a new feature which supports dynamically typed languages in the JVM. This feature is developed within the Da Vinci Machine project whose mission
2464-407: The normal method of operation a viewer connects to a port on the server (default port: 5900). Alternatively (depending on the implementation) a browser can connect to the server (default port: 5800). And a server can connect to a viewer in "listening mode" on port 5500. One advantage of listening mode is that the server site does not have to configure its firewall to allow access on port 5900 (or 5800);
2520-561: The organizational units of JVM byte code is a class . A class loader implementation must be able to recognize and load anything that conforms to the Java class file format . Any implementation is free to recognize other binary forms besides class files, but it must recognize class files. The class loader performs three basic activities in this strict order: In general, there are three types of class loader: bootstrap class loader, extension class loader and System / Application class loader. Every Java virtual machine implementation must have
2576-764: The other hand, there is also an 8-character limit on some versions of VNC; if a password is sent exceeding 8 characters, the excess characters are removed and the truncated string is compared to the password. UltraVNC supports the use of an open-source encryption plugin which encrypts the entire VNC session including password authentication and data transfer. It also allows authentication to be performed based on NTLM and Active Directory user accounts. However, use of such encryption plugins makes it incompatible with other VNC programs. RealVNC offers high-strength AES encryption as part of its commercial package, along with integration with Active Directory. Workspot released AES encryption patches for VNC. According to TightVNC, TightVNC
2632-423: The program. The translated parts of the program can then be executed much more quickly than they could be interpreted. This technique gets applied to those parts of a program frequently executed. This way a JIT compiler can significantly speed up the overall execution time. There is no necessary connection between the Java programming language and Java bytecode. A program written in Java can be compiled directly into
2688-523: The same JVM. Furthermore, common programmer errors that often led to data corruption or unpredictable behavior such as accessing off the end of an array or using an uninitialized pointer are not allowed to occur. Several features of Java combine to provide this safety, including the class model, the garbage-collected heap , and the verifier. The JVM verifies all bytecode before it is executed. This verification consists primarily of three types of checks: The first two of these checks take place primarily during
2744-416: The same program can be run on any computer that has such an interpreter. When Java bytecode is executed by an interpreter, the execution will always be slower than the execution of the same program compiled into native machine language. This problem is mitigated by just-in-time (JIT) compilers for executing Java bytecode. A JIT compiler may translate Java bytecode into native machine language while executing
2800-630: The sense that a viewer of one flavour can connect with a server of another; others are based on VNC code but not compatible with standard VNC. VNC was originally developed at the Olivetti & Oracle Research Lab in Cambridge, United Kingdom, whose developers subsequently created RealVNC Ltd and claimed VNC and RFB as registered trademarks in the US and some other countries. The original VNC source code and many modern derivatives are open source under
2856-534: The situation where the owner of the computer accessed realizes there is someone in control of their device without previous notice. Xvnc is the Unix VNC server, which is based on a standard X server . To applications, Xvnc appears as an X "server" (i.e., it displays client windows), and to remote VNC users it is a VNC server. Applications can display themselves on Xvnc as if it were a normal X display, but they will appear on any connected VNC viewers rather than on
SECTION 50
#17327911296052912-505: The target architecture's registers. In fact, code verification makes the JVM different from a classic stack architecture, of which efficient emulation with a JIT compiler is more complicated and typically carried out by a slower interpreter. Additionally, the Interpreter used by the default JVM is a special type known as a Template Interpreter, which translates bytecode directly to native, register based machine language rather than emulate
2968-515: The underlying hardware platform. The JVM reference implementation is developed by the OpenJDK project as open source code and includes a JIT compiler called HotSpot . The commercially supported Java releases available from Oracle are based on the OpenJDK runtime. Eclipse OpenJ9 is another open source JVM for OpenJDK. The Java virtual machine is an abstract (virtual) computer defined by
3024-462: The user does not have Java installed on their computer. With the continuing improvements in JavaScript execution speed, combined with the increased use of mobile devices whose web browsers do not implement support for plugins, there are efforts to target those users through transpilation to JavaScript. It is possible to either transpile the source code or JVM bytecode to JavaScript. Compiling
3080-512: The user to break out of the sandbox and access the local file system, clipboard , execute external pieces of software, or network. Formal proof of bytecode verifiers have been done by the Javacard industry (Formal Development of an Embedded Verifier for Java Card Byte Code ) For each hardware architecture a different Java bytecode interpreter is needed. When a computer has a Java bytecode interpreter, it can run any Java bytecode program, and
3136-440: The verification step that occurs when a class is loaded and made eligible for use. The third is primarily performed dynamically, when data items or methods of a class are first accessed by another class. The verifier permits only some bytecode sequences in valid programs, e.g. a jump (branch) instruction can only target an instruction within the same method . Furthermore, the verifier ensures that any given instruction operates on
#604395