omf-python icon indicating copy to clipboard operation
omf-python copied to clipboard

Scope of work for C++ OMF v2 reference implementation

Open fwkoch opened this issue 6 years ago • 3 comments

Work for this contract includes:

  • C++ implementation of OMF v2 with support for OMF v1
    • Roughly 20 classes in OMF v2 with validation and JSON serialization/deserialization
    • Read and write OMF v2 files
    • Read OMF v1 files and translate data structures into OMF v2
    • Python prototype is to be used as reference for data and file structures
  • Comprehensive test suite
    • Unit tests for all classes/methods
    • valgrind tests to ensure not memory leaks/corruption
    • Integration tests reading, validating in memory, and writing files
    • Validation of files against the Python prototype
    • Continuous integration with automated test suite in Github for Windows, Mac, and Linux
      • AppVeyor + TravisCI or Azure DevOps would be acceptable - both offer free CI for open source projects
  • Documentation
    • Technical API docs
    • Compiling/installing instructions
    • Example code snippets
    • Built with doxygen.nl and sphinx: https://devblogs.microsoft.com/cppblog/clear-functional-c-documentation-with-sphinx-breathe-doxygen-cmake/
  • Platforms
    • Windows 7 +
    • MacOS (10.14+)
    • RHEL/CentOS 7/8
    • Debian 9/10 (or Ubuntu equivalent
  • Build system / package management:
    • CMake as build system
    • CPack package management
  • Compilers:
    • C++14
    • support all of: MSVC2015, clang 8.x, gcc 8.x
    • Warning free compilation, MSVC => /w4, gcc and clang => -Werror
    • No #define mountains, OS or compiler specific implementations have to be moved to separate implementation files, with consistent interface
  • Included libraries
    • All libraries included with distributed code must be MIT (or more permissive)
    • JSON lib - https://github.com/nlohmann/json
    • zip lib - zlib has it's own as-is license, essentially MIT
    • boost, gsl are also MIT
    • Tests can use boost::test, catch2, valgrind
  • General best practices
    • SOLID coding practices (https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design)
    • Adherence to the new C++ coding standard (https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rl-name) as proposed by the standardization committee.
    • Ban of template meta-programming as that makes the code really hard to maintain. Templates are okay though.
    • Static analyzer - Code has to pass clang-tidy, especially the C type cast rules and modernization - https://clang.llvm.org/extra/clang-tidy/checks/list.html
    • Code formatting rules, i.e. Mozilla with 4 spaces as indent
    • Should not crash on running out of memory
    • Code must be regularly committed to the public repo set up on GMG Github for review by technical stakeholders throughout the development process, to ensure these standards are upheld

fwkoch avatar Jul 09 '19 16:07 fwkoch

The above scope of work was reviewed and agreed upon at a GMG Data Access and Usage Working Group meeting 17 July 2019.

fwkoch avatar Jul 18 '19 20:07 fwkoch

How does one participate in the bidding process?

josephwinston avatar Jul 25 '19 15:07 josephwinston

@josephwinston - Thanks for the comment! GMG is currently putting together a Request for Proposals (with info about bidding process, etc) around the technical scope of work described here. I will update this issue once the RFP is complete.

In the meantime, you are welcome to reach out to David Sanguinetti and express interest. In that case, GMG can follow up with you directly.

fwkoch avatar Jul 25 '19 17:07 fwkoch