/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ /* * Copyright (c) 2004-2008 The Trustees of Indiana University and Indiana * University Research and Technology * Corporation. All rights reserved. * Copyright (c) 2004-2005 The University of Tennessee and The University * of Tennessee Research Foundation. All rights * reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * University of Stuttgart. All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2008-2012 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015-2016 Los Alamos National Security, LLC. All rights * reserved. * Copyright (c) 2016-2017 IBM Corporation. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow * * $HEADER$ */ /** * @file * * Top-level interface for \em all MCA components. * * Historical notes: * * Open MPI originally used a v1.0.0 of the MCA component structs, but * did not have a version number in the struct name. If I recall * correctly, this is because we simply didn't think through (or never * envisioned) changing the MCA base component struct itself. Oops. * * We made some changes in the base struct in Open MPI v1.3, and * decided the following at the same time: * * - Bump the MCA version number to 2.0.0 and add some "reserved" * space at the end of the struct. * - The major MCA version number is essentially tied to the space * that the struct occupies; if we make future changes in the struct * by just using some of the reserved space, it may be possible to * just increment the minor version number (depending on the scope of * the change). If we need to add more space to the struct, we'll * increment the major version number. * - The MCA base component struct now has a version number in it * (starting with Open MPI v1.3, it is 2.0.0). * - As was an unstated assumption in prior versions of Open MPI, the * unversioned versions of struct names (both in the MCA base and in * individual framework bases) are intended for components who want * to be forward source-compatible. That is, the unversioned struct * name always represents the most recent interface version. If you * need to use an older version, you can explicitly use that older * struct version name. Please note, however, the Open MPI * developers may not generally provide older versions of framework * interface structs unless they know if someone outside of the Open * MPI community needs it. * * ***IF YOU NEED BACKWARDS SOURCE OR BINARY COMPATIBILITY, you must * let us know!*** * * - We are currently only aware of one external developer making Open * MPI components for the v1.2 series. He already knows that there * are major changes coming in the v1.3 series, and does not expect to * be able to use his v1.2 DSO binaries in v1.3. As such, we are * breaking backwards binary compatibility in v1.3: there is no * possibility of loading an MCA v1.0 binary component in Open MPI * v1.3 or beyond (source compatibility is much easier -- the binary * "refuse to load MCA components