Firebird Project is applying for participation in the Google Summer of Code 2015 program, which helps student developers to contribute to various open source projects. We believe in providing students with interesting and useful tasks that Firebird users could also benefit from.

Proposed Projects 
  1. Native PSQL debugger
  2.  
    Firebird has a DSQL/PSQL execution engine known as "the looper", which implements a state machine and executes the tree of nodes. For PSQL requests, basic debugging information is available, that maps every executon node to its corresponding source code (line/column info) and provides knowledge about local variables, etc. A mechanism of breakpoints is needed, along with provision to control debugging - attach to some session, set/clear breakpoints, retrieve call stack, retrieve values for local variables, etc.

    Complexity: medium
     
  3. Customizable error/warning logging
  4.  
    A single firebird.log file logs all types of errors. The codebase should be reviewed to find all error reporting places and assign priorities (aka severity levels). An abstract interface should be developed to log errors/warnings. Its implementation should be plug-in based, for which the underlying infrastructure is in place. A default logging plug-in should more or less match the existing implementation, probably with prettier output and some configuration abilities. Alternative logging plug-ins may include integration with syslog, etc.

    Complexity: easy
     
  5. Non-Firebird providers for external EXECUTE STATEMENT

  6. The Firebird engine allows dynamic SQL to be executed in PSQL modules via the EXECUTE STATEMENT command. This ability extends to remote databases via the ON EXTERNAL clause. While the existing implementation supports access to Firebird databases only, feature was designed to be extendable. A provider library is needed, implemented to act as a gateway between the Firebird API and some external API. ODBC is preferred for a number of reasons: it is native code, it is cross-platform and it supports a variety of RDBMS via ODBC drivers. Other options could be considered.
     
    Complexity: medium
     
  7. Full-text search (Sphinx based) integration into the engine

  8. Back in 2008, the Firebird Project developed patches adding Firebird support to the Sphinx search engine. It wasn't really an integrated solution, just the first step towards that goal. Patches need to be updated (or maybe rewritten from scratch) to match the current Sphinx versions. Possibilities for integration of the real product, be it embeddable or side-by-side, need to be researched and implemented, including SQL support for full-text search queries.
     
    Complexity: medium
     
  9. Machine-oriented audit/trace output

  10. The Firebird engine has a built-in audit\tracing feature allowing pluggable modules to be used for logging events. The default plug-in distributed inside Firebird packages implements only text output, which is human readable but not really friendly to any automated processing. It would be a useful addition to implement alternative output format(s) that are machine oriented and allow easy parsing and special processing.
     
    Complexity: easy
     
  11. Modern replacement for /examples

  12. The Firebird distribution includes an example database and a set of API examples written in C. They were inherited from InterBase and now show their age. Also, Firebird v3 introduces a new object-oriented API that needs good examples. We suggest describing some application field that could be used for learning SQL and the API, designing and populating a new example database and implementing a set of source code examples demonstrating API usage. The preferred language is C++.
     
    Complexity: easy
     
  13. Integration with external monitoring solutions

  14. The Firebird engine has a number of built-in monitoring features, including the virtual MON$ tables and audit/tracing facilities. Some of them are good for immediate runtime monitoring, others are useful to perform any post-factum analysis. These features should be reviewed, new monitoring events could be suggested and implemented, hooks for external communication at runtime are to be designed and implemented, pluggable compatibility layers with well-known monitoring solutions like PerfMon or statsd/Graphite are to be developed.
     
    Complexity: medium
     
  15. Isolated process-based sandboxes for external native code execution
  16.  
    Firebird allows execution of arbitrary user-defined binary code (external procedures/functions/triggers, BLOB filters, etc). However, this affects reliability and implies some serious security risks. It makes a lot of sense to isolate (optionally) the potentially dangerous code inside process-based "envelopes", aka sandboxes, to protect the Firebird server from unexpected crashes. Also, permissions for such sandbox processes could be limited to prevent any undesired activity.

    Complexity: medium
     
  17. Customizable format for external tables via plugins/adapters
  18.  
    Firebird supports external tables in the predefined binary format (fixed-length rows). They are non-transactional and primarily used for user-level logging and export/import tasks.The whole interface to external tables could be redesigned to allow pluggable implementations of different table formats. One possible extension could be the CSV format; other options could also be considered.

    Complexity: easy
     
  19. Design specification for tablespaces

  20. Many RDBMS products have support for tablespaces - an ability to define multiple page storages and use them for specific database objects (tables, indices, etc). Firebird currently lacks this feature but it has enough of the necessary internals already in the codebase, e.g. a concept of page spaces. A complete implementation of tablespaces surely overflows the GSoC timeframes, but a proper design specification and patches implementing at least some of the required code parts look doable.
     
     
  21. OpenGIS support, R-tree design and implementation

  22. GIS support is one of the top-voted but still missing features in Firebird. It's worth learning the OpenGIS requirements, design the missing parts and at least partially design and implement the effective searching structure (R-tree) as an alternative to the existing B-tree implementation.

    Complexity: hard

    References: http://www.opengis.org/docs/99-049.pdf
     
  23. RedHat DLM plug-in replacement for Firebird lock manager

  24. In the past, InterBase (Firebird's historical predecessor) worked on VMS operating systems and natively supported the VMS distributed lock manager (DLM). The VMS days are gone and Firebird has its native lock manager, still compatible with the VMS DLM at the interface level. Over the years, the VMS DLM reincarnated as OpenDLM and then evolved into RedHat DLM, and currently looks available in RHEL and CentOS at the kernel level. It would be an interesting challenge to figure out how much compatibility is preserved and what could be adapted to allow the RedHat DLM as a replacement for Firebird's lock manager.
     
    Complexity: hard

    References: http://opendlm.sourceforge.net
Also, students are welcome to search the project's Issue Tracker for interesting tasks under the "New Feature" and "Improvement" categories and we are ready to discuss them as possible candidates for GSoC projects.

Project Admins
  • Dmitry Yemanov
  • Helen Borrie
Prospective Mentors
  • Vlad Khorsun, Firebird Project
  • Alex Peshkoff, Firebird Project
  • Roman Simakov, RedSoft Corporation
  • Dmitry Starodubov, RedSoft Corporation
  • Dmitry Yemanov, Firebird Project
Useful Links