A while ago, Erik implemented support for
Graphics Card Profiles.
So, it would be possible to take this concept and add to it, what's needed in order to support startup modes with dynamic feature scaling in mind:
http://wiki.flightgear.org/Feature_ScalingThat way, FlightGear could detect what's available in terms of GPU support during startup and pick a suitable default profile.
This should also work pretty well with the Compositor:
http://wiki.flightgear.org/CompositorThanks to the property-rule subsystem, we already have the machinery in place to fine-tune parameters as needed - it's primarily a matter of hooking up things together, which is an idea that Stuart and James discussed on several occasions, i.e. using a PID controller to tweak settings as needed to target a certain frame rate/spacing
Longer term, for FlightGear to be able to make progress in the graphics department (using more modern OpenGL), it will inevitably have to get rid of legacy OpenGL code (2D panels, HUD, PUI to name a few) - and short of having a team of volunteers to port such legacy functionality, it will make sense to introduce a mechanism to safely phase out functionality over time, i.e. by making it optional in certain "startup modes", so that new modes can be supported, runtime modes that can make safe assumptions about legacy code simply being out of the loop - a number of people have independently worked on mode specific functionality anyway, such as features that specifically target "developers" (developer mode) or modes that specifically certain types of aircraft (think combat, spacecraft, helicopter vs. fixed wing) - we even have non-aircraft vehicles (think vessels) - sooner or later, the enormous flexibility of FlightGear as a platform means that such diverging functionality will need to be identified, and wrapped in dedicated "modes" - even if just to get rid of redundant UI items (think all aircraft-related UI dialogs that make little sense in a spacecraft context or vice versa) - thus, the introduction of mode-specific UI items (think menubar, GUI dialogs) would make sense - and that means, identifying more and more use-cases/resources that are mutually exclusive, which may even pertain command line arguments:
http://wiki.flightgear.org/Startup_ModesAgain, this has already been happening over the course of the last few years, it's just not something that is being worked on in any orchestrated fashion, but it is becoming clear that for FlightGear as a platform to make progress, it will need to address the challenge that it is being used for mutually-exclusive purposes, and that getting rid of certain hard-coded assumptions does make sense, which will also provide an excellent opportunity to get rid of tons of legacy code in a backwards compatible fashion, at the mere cost of introducing new "startup profiles" that declare certain features obsolete, so that these can be safely disabled (and ignored!) while remaining in the source tree/binary - releasing a new FlightGear version will then include agreeing on the default startup profile to be used.
Longer term, this may even mean that controversial features like Nasal can be entirely disabled by providing a startup mode that never runs any Nasal interpreter at all, which could be a great starting point for people wanting to tinker with alternate scripting environment (think FGPythonSys) - equally, this approach will provide the flexibility to tinker with totally new schemes for scenery/terrain (think safely including osgEarth in a dedicated "osgEarth startup mode" without risking breakage), but also to support planetary simulation - as per bugman's idea:
http://wiki.flightgear.org/Reaching_for_the_starsNote that this is perfectly in line with the ongoing work to make FlightGear more modular by allowing subsystems to be disabled at startup/runtime - as well as the ongoing cppunit work, for better regression tests.
In addition, having dedicated support for "Startup modes", will also mean that it will be easier for people to create "benchmarks" just for regression testing purposes:
http://wiki.flightgear.org/FlightGear_BenchmarkAgain, this has been happening for years already, it's just something that nobody ever talked about, but the logical next step is formalizing the introduction of startup modes, so that different people/teams can work on different features without stepping on anyone's toes, and without cluttering our UI unnecessarily - think about having a dedicated menubar for spacecraft, vessels or for people wanting to use FlightGear as an IG (image generator) only.
The concept is also pretty sound, because we're already using the concept of PropertyList/XML overlays in several places - the most recent example being the addon system, which supports its own dedicated menu items and GUI dialogs. If this work were to be generalized, "startup modes" would primarily boil down to being sub-folders in $FG_ROOT, with their own sets of options.xml, menubar.xml and gui/dialogs
Over time, this will help clean up FlightGear enormously, while also providing a sandbox for people wanting to tinker with new functionality, without it having to fit into the bigger picture of "flight simulation".
And once you think about it, this scheme would nicely fit when it comes to supporting different renderers/pipelines, too
And yes, you could also have the equivalent of $FG_ROOT/Startup Profiles/Headless without stepping on anyone's toes !

Such profiles (folders) could then be used as template for people wanting to implement new profiles, akin to docker images - think about a Python mode based on headless, just for regression testing purposes.