The pointers Johan has posted are spot-on WRT external interfacing, and we already have more than a dozen of external tools doing exactly this - e.g. see:
Subject: Instructor station for FlightGear (Java project)Fortunately, these days, you don't need to use any external tools to create an instructor console - you could easily create one using HTTP + JavaScript using the built-in httpd server.
That will be the easiest option for people less familiar with coding, i.e. basic JavaScript + HTML should suffice.
However, for people familiar with C++, Canvas + Nasal is probably a more flexible approach, because the C++ code can be easily extended where necessary.
Obviously, you should first of all be able to build FlightGear from source and be sufficiently familiar with git/gitorious.
Overall, an instructor console/station is a fairly popular request among professional users (or even just private pilost).
So it would be good to have some kind of prototype/proof-of-concept that could be extended over time.
If you're considering the Canvas/Nasal approach, here are a few more pointers:
FlightGear supports scripting via its built-in scripting language (analogous to JavaScript in your Browser):
http://wiki.flightgear.org/NasalFor 2D rendering purposes, FlightGear supports a property-tree based 2D rendering API that sits on top of OpenGL/OSG and ShivaVG:
http://wiki.flightgear.org/CanvasThere are object-oriented Nasal bindings for using this 2D API:
http://wiki.flightgear.org/Canvas_Nasal_APIAn instructor console will typically have the need to show dynamic and interactive maps/charts, for this we have a dedicated mapping/charting framework implemented on top of Nasal/Canvas:
http://wiki.flightgear.org/MapStructureEqually, an instructor console will typically have a need for rendering cockpit instruments, including even complex avionics (MFDs) - this, too, can be easily supported via Canvas:
Note that this is a conventional Canvas texture shown in a legacy GUI (PUI) dialog.
But we can also show native Canvas windows/dialogs instead:
Equally, it is possible to combine modern Canvas features with our legacy GUI:
None of this requires any C++ level coding/patching or rebuilding FG.
However, there are some things where C++/building knowledge will be useful - for instance, the JavaScript/HTML route has serious shortcomings once it comes to using native C++ data structures - equally, Canvas cannot currently do certain things - such as for example rendering custom scenery/aircraft/cockpit views to a texture/camera.
However, Canvas can be easily extended - for once, by exposing new C++ functionality to Nasal (scripting) space:
http://wiki.flightgear.org/Nasal/CppBindBut also by extending the Canvas system itself via C++ additions:
http://wiki.flightgear.org/Canvas_DevelopmentSpeaking from experience, it is better for efforts like these (but also FlightGear), if people can be convinced to use a "native" FlightGear approach, so that FlightGear is extended where necessary, and existing solutions refined over time (no matter if you're using Mongoose (httpd/Javascript) or Nasal/Canvas).
If you're interested in modern C++ coding, Canvas is probably the right place to be for you.
PS: I've started a new wiki article (stub for now) to gather all related discussions/feedback there:
http://wiki.flightgear.org/Instructor_Station