// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

image::images/netbeans-stamp-80-74-73.png[title="Content on this page applies to the NetBeans IDE 7.3 and 7.4 and 8.0"]

= Modes of C/C++ Remote Development in the IDE
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Modes of C/C++ Remote Development in the IDE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Modes of C/C++ Remote Development in the IDE

March 2014 [Revision number: V8.0-1]

This article describes the remote development features available in the NetBeans IDE when you have the C/C++ module installed, and how to choose the best way to use them in your development environment.













== What Remote Development Is

Remote development is a feature of the NetBeans IDE that allows you to run the IDE on a computer running Microsoft Windows, Mac OS X, Oracle Solaris, or Linux; and build, run, and debug your program on another computer running Oracle Solaris or Linux.


== When to Use Remote Development

You might want to use remote development if some of the following circumstances are true for you:

* Your desktop system is not running Oracle Solaris or Linux.

* You are running the IDE on a shared Solaris system that sometimes experiences high loads.

* Your access to systems running Oracle Solaris or Linux is limited to Secure Shell (SSH) for security reasons.

* Running graphical user interface tools in the Solaris environment is difficult.

* The software you are developing must compile and run on multiple platforms including Solaris or Linux.


== How Remote Development Works

The IDE provides features for managing remote hosts. You can configure a remote host to use for building, running, and debugging your C, C++, and Fortran projects. The remote host must meet the following conditions:

* The remote host operating system must be Oracle Solaris or Linux.

* The remote host must run the SSH daemon, `sshd`.

* At least one tool collection (GNU, Oracle Solaris Studio, or Sun Studio) must be accessible on the remote host.

* You must have a user account on the host.

You can manage your remote hosts in the Services window of the IDE.

image::images/services_window.png[]

Once you have configured the remote host and connected to it, you can build, run, and debug projects just as you do on your local system. Remote IDE commands are executed over SSH.

When you use a remote development host, the local and remote hosts both need to access the project files. This access can be accomplished through file sharing or securely copying the files. Before the IDE can use file sharing between the local and remote systems, the shared filesystem or folder must be set up and accessible to both systems. Remote files are accessed through SFTP or another file sharing mechanism available in the operating system the host is running (for example, Network File System (NFS), Samba, or WebDAV).

If file sharing is not possible, you can use Automatic Copying to copy the files to the server using SSH.


== Benefits of Remote Development

Remote development provides the following benefits:

* You can use the same development environment for all of your projects.

* The resources of your desktop system are better utilized.

* Network traffic is optimized.

* Your IDE response time is better.

* You can browse remote file systems from the IDE.

* You can open a terminal window in the IDE for a remote host.

* You can use it in SSH-only secure environments.

 image::images/modes_diagram.png[]

In simple mode, the source files reside primarily on your local host. When you build your project, the source files are delivered on demand to the remote host using SSH File Transfer Protocol (SFTP).

In mixed or shared mode, the source files reside in a location that is shared between the local host and remote host using NFS, Samba, WebDAV, or another file sharing system.

In full remote mode, the source files reside on the remote host. The IDE accesses the files using SFTP.


== Deciding Which Remote Development Mode to Use

Which development mode is best for your specific situation depends on the development environment in which you work. Each of the following sections describes an example of a development environment in which one development mode provides the most benefits.


=== Simple Mode

Simple mode might be the best remote mode for your needs if the following diagram describes your development environment.

image::images/simple_mode_diagram.png[]

In this environment, simple mode provides these benefits:

* You can use the same IDE for local and remote development.

* You can switch easily between hosts and platforms in the IDE.

* You can use the IDE in an SSH-only environment.

* Your mobility is improved.


=== Mixed (Shared) Mode

Mixed or shared mode might be a good choice if your development environment resembles the one shown in the following diagram.

image::images/mixed_mode_diagram.png[]

The benefits of using mixed mode in this environment are:

* You can easily switch between hosts and platforms in the IDE.

* There is no duplication of files (caching) such as would occur in the other two modes.

* The network throughput will be as good as your file sharing mechanism (for example, NFS, Samba, or WebDAV) can provide.


=== Full Mode

Full mode might be the best mode for you if your development environment resembles the one shown in the following diagram.

image::images/full_mode_diagram.png[]

In this environment, the benefits of using full remote mode are:

* Migration from using X-window forwarding or VNC is virtually seamless.

* Your IDE response time improves.

* You are less dependent on the resources of the development host.

* A smaller load on the development host reduces the load on Oracle Solaris.

* You can create new remote projects from remote binary files.


== Selecting Your Remote Development Mode

The remote development mode that you use is determined by the way you configure a remote build host, but also by the way you access the project in the IDE.

For each mode, you must first configure a remote build host, as described in the link:./remotedev-tutorial.html[+C/C++ Remote Development tutorial+] and in the IDE help.

You can select simple mode or mixed mode for your remote host in the IDE using the Host Properties dialog box to specify how project files should be accessed when you use the host.

Open the Services window, expand the C/C++ Build Hosts node, right click a remote host, and select Properties.

image::images/host_properties_dialog.png[]


=== Simple mode

For simple mode, set Access project files via to Automatic copying.

You can right-click a project, select Set Build Host, and select the remote host that you have configured to access project files via automatic copying. Then you are using simple remote development mode. When you build the project, the project files will be copied automatically to your NetBeans user directory on the remote host.


=== Mixed mode

For mixed mode, set Access project files via to System level file sharing.

You can right-click a project, select Set Build Host, and select the remote host that you have configured to access project files via system level file sharing. Then you are using mixed remote development mode. When you build the project, the project files stay where they are because they can be accessed from the local host and the remote build host.


=== Full remote mode

To use full remote mode in the IDE, use the Remote Development tool bar described in the following section.


== Full Remote Development Using the Tool Bar

In full remote mode, you can use the IDE running on your local host to work on projects that are located on a remote host by using the remote development tool bar.

The tool bar is shown in the following figure.

image::images/RemoteToolbar.gif[] 

If you do not see the tool bar in the IDE, you can display it by choosing View > Toolbars > Remote.

You can use the remote tool bar to select a remote host you have already configured and work on projects and files on the remote host the same as if they were local.

Use the icons as described in the following table.

|===
|image::images/connected24.gif[]
 |

Connection status. Click the icon to connect to the server selected in the list next to the icon. If you are already connected, you can click this icon to disconnect from the server.

The icon indicates connection status by turning green when connected and red when not connected.

 

|image::images/newProject24.gif[]
 |

Create remote project. Click the icon to create a new project on the currently connected host.

By default, the project is created in your `~/NetBeansProjects` directory on the remote host.

 

|image::images/openProject24.gif[]
 |

Open remote project. Click the icon to open an existing project on the currently connected host.

You can browse to the project on the remote file system.

 

|image::images/openFile24.gif[]
 |

Open remote file. Click the icon to open a file on the currently connected host.

You can browse to the file on the remote file system.

 
|===


== Caches and Security

To provide fast access to remote files, the IDE uses a disk cache on the local system. The cache is located in `_userdir_/var/cache/remote-files` where `_userdir_` is unique to the user and its location varies by the platform where you are running the IDE.

See a description of the `_userdir_` and locations for each platform at link:http://wiki.netbeans.org/FaqWhatIsUserdir[+http://wiki.netbeans.org/FaqWhatIsUserdir+].

When using remote development in simple and shared modes, only system headers will be accessed through the local cache so there is no security risk.

In full remote mode, although the files are located on the remote host, the project is parsed on the local computer. As the source files are accessed for parsing, they are cached on the local host in `_userdir_/var/cache/remote-files` and eventually all the source files are in the cache.

On mobile computers this might be considered a security risk. For increased security, the cache directory can be encrypted or can be deleted on a regular basis.

Caches that reside at ` ~/.netbeans/remote` on the remote host are created when you use simple mode and source files are copied automatically on demand from the local host to the remote host when you build the project. These files are as secure as any others on the server, so are not a security concern.


== For More Information

See the following locations for more information:

* The Help menu in the IDE provides access to extensive information about using the IDE.

* The link:./remotedev-tutorial.html[+C/C++ Remote Development tutorial+] tells how to do simple remote development step-by-step

* The link:https://netbeans.org/kb/trails/cnd.html[+C/C++ Learning Trail+] provides several articles and tutorials for developing in C/C++ in the IDE.


link:/about/contact_form.html?to=3&subject=Feedback:%20C/C++%20Remote%20Development%20Modes%20-%20NetBeans%20IDE%20Article[+Send Us Your Feedback+]link:mailto:users@cnd.netbeans.org?subject=Feedback:%20C/C++%20Remote%20Development%20Modes%20-%20NetBeans%20IDE%20Article[+Send Feedback on This Article+]


