The text hereafter is the "Implementation" section of the IPOL submission manual, as it was before the adopton of the software guidelines.


Implementation

You must provide all the code necessary to build an executable implementation your algorithm. This code will be distributed from the algorithm web page and used for the online demo.

The program should be minimal and must be usable from the command-line without any user interaction or graphical user interface, taking all its parameters from the command line. It must read and write data files in standard and documented formats.

You must include the routines used to read the input and write the output images. Only one image format is needed, because the online demo environment will handle image format conversion. Some help, including example code, is provided in the IPOL development pages. You can also reuse code fragments from other published algorithms to handle input/output.

Because of the demo interface limitations, the program must not use more than 1 GiB of memory, and must not take more than 30 seconds to run on typical data; some code can be accelerated or parallelized and input size can be limited to enforce these requirement. Help will be provided to the authors to accelerate their code by classic techniques.

This minimal implementation of your algorithm will be reviewed as part of the IPOL publication process. You can also provide alternative implementations (rich feature set, graphical interface, binary versions) in the web page, but these versions will not be reviewed and certified by IPOL.

Quality

These requirements aim to enforce quality and portability standards on the code submitted and published on IPOL.

The exact standard of the programming language must be specified and will be used for compilation; accepted languages and standards are C89 (ANSI C), C99, C++98 (ANSI C++). It must compile without errors with the options -Wall -Wextra -Werror for the current version of the GNU gcc compiler. The code must not require any extension of the standard library (libc, libc++ or stl) or be specific to a hardware environment or to an operating system. Because it is used for the demo, it must perfectly work in a Linux 32bit and 64bit environment.

The implementation is provided in source form, is self contained, and requires no external component except for standard, reliable, portable libraries; the current list of accepted libraries is libtiff and libpng to read and write images, libfftw3 and clapack for Fourier transforms and linear algebra, zlib for lossless compression; other libraries can be examined on request. This library list is limited to ensure long-term reliability of the IPOL implementations.

Compilation and usage instructions must be available in a README.txt file.

You must deliver a very readable code, commented precisely and exhaustively. Comments must be abundant (typically a 1/8 comment/instruction ratio) and must link each module to its mathematical algorithm description in the web page. You must also explain the implementation choices and avoid unnecessary programming tricks that shorten the code but make in fact its comprehension difficult to nonprofessional programmers.

The suggestions hereafter are guidelines for a clean and portable code. They are not requirements for submission.

Reading and writing images should use PNG or TIFF file formats (note that TIFF allows floating-point images). Reading and writing non-image data should use plain text files, possibly gzipped.

The source code should be fully commented and documented with doxygen annotations. The source code and its documentation should be written in English; this include comments, file names, function and variable names. The source code should be clearly and consistently indented.

The source code should not include any content not related to the submitted algorithm.

The source code files should not exceed 1000 lines per file, 80 signs per line. If composed of multiple files, the source code should follow the standard .h (prototypes only) and .c (implementation only) structure. Programs made of several files should use separate compilation and the make compilation tool.

Copyright Policy

IPOL needs a free software license for the algorithm implementations because we want anyone who downloads the source code to be able to try, use, modify and reuse it.

Three options are proposed for the copyright management of your works.

  1. copyright assignment
    Authors assign the copyright to IPOL. IPOL is free to manage the copyright and license of this work. Authors are credited as such in the source code and its documentation.
  2. copyright agreement
    Authors sign a conditional and non-exclusive copyright agreement with IPOL. Under this agreement, IPOL has the right to manage the licenses of this work as long as it complies with the Free Software and Open Access principles, and authors keep the right to manage it out of IPOL, including restrictive copyright management and commercial use.
  3. accepted licenses
    Authors keep the copyright of their works, but choose a free software license within this list : GPL, LGPL, AGPL, BSD.
    Note that GPL licenses do not allow "everything" with your code. Anyone reusing your code must provide the source code of his software, and use the GPL license too. This has been a successful model for more than 25 years of free software, including research code.

With the first option, copyright management of the published works is made easy, but the authors have to transfer all their rights to IPOL. With the third option, authors keep as much rights on their works as possible while complying with the IPOL project goals, but IPOL is exposed to an increasing complexity in the copyright management after years when authors can not be reached anymore.

The second option is a compromise between the rights of the authors and the flexibility needed for a long-term management of IPOL. The current draft of this agreement, based on the FSFE Fiduciary License Agreement, needs to be reviewed by copyright experts. This option is not available for the moment.

As an exception, implementations of patented algorithms may be distributed with ad-hoc licensing terms instead of these free software licenses.