POCO C++ Libraries Information

About

The POCO C++ Libraries project was started by Günter Obiltschnig (@obiltschnig) in 2004. Back then C++ was rapidly reaching its absolute low point in popularity, as almost everyone was following the trend to managed and virtual-machine based programming languages. Nevertheless, Günter believed in C++. He wanted to create a comprehensive set of libraries that cover all modern-day programming needs. For himself, but also for other C++ programmers struggling to find high-quality and easy-to-use C++ libraries for network programming, XML (and later JSON) processing, database access, and all the other features virtually every modern application needs.

The first release of the C++ POrtable COmponents (as it was called back then, and from where the name POCO came from) was in February 2005. Shortly after the first release, Günter was joined by Aleksandar Fabijanic, who has been a contributor and co-project lead ever since.

More than 180 developers have contributed code to the POCO C++ Libraries since the beginning.

POCO has been used in hundreds, if not thousands, of projects worldwide. Whether building automation systems, industrial automation, IoT platforms, air traffic management systems, enterprise IT application and infrastructure management, security and network analytics, automotive infotainment and telematics, financial or healthcare, C++ developers have been using the POCO C++ Libraries in challenging and mission-critical applications.

License

The POCO C++ Libraries are licensed under the Boost Software License. A very liberal license that encourages both commercial and non-commercial use.

The Boost Software License 1.0

Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:

The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Community

 Support

Please use Stack Overflow to submit questions to the community.
You can submit bug reports, feature requests, or other issues via GitHub.

Professional, paid support is available from Applied Informatics.

 GitHub

The POCO C++ Libraries source code is on GitHub. GitHub also hosts our Wiki and issue tracker.

 Blog &  Twitter

Read our blog and follow @pocoproject on Twitter to stay up to date with the latest announcements.

 Stack Overflow

POCO-related questions on Stack Overflow are tagged poco-libraries.

 Slack

Collaborators use the pocoproject Slack.
There is also a #poco channel on the cpplang Slack, but not much is happening there.

Project Governance

Technical Leadership

The POCO C++ Libraries project is jointly governed by a Technical Steering Committee (TSC) which currently consists of:

  • Günter Obiltschnig
  • Aleksandar Fabijanic

The TSC has final authority over this project including:

  • Technical direction
  • Project governance and process (including this policy)
  • Contribution policy
  • GitHub repository hosting
  • Conduct guidelines
  • Maintaining the list of additional Collaborators

The TSC can be contacted at poco@pocoproject.org.

Collaborators

The POCO C++ Libraries GitHub repository is maintained by the TSC and additional Collaborators who are added by the TSC on an ongoing basis. Individuals making significant and valuable contributions are made Collaborators and given commit-access to the project. These individuals are identified by the TSC and their addition as Collaborators is discussed during TSC meetings.

Modifications of the contents of the GitHub repository are made on a collaborative basis. Anybody with a GitHub account may propose a modification via pull request and it will be considered by the project Collaborators or TSC. All pull requests must be reviewed and accepted by a Collaborator with sufficient expertise who is able to take full responsibility for the change.

Security

Security issues or vulnerabilities can be reported via email directly to the core team at security@pocoproject.org. The core team will respond to security issues within 24 hours. If you need to send sensitive information, get in touch first.

Code of Conduct

The POCO C++ Libraries project and its community adhere to the Contributor Covenant Code of Conduct.

Funding & Sponsorships

The ongoing development and maintenance of the POCO C++ Libraries requires a lot of resources. That is why sponsors are needed to help funding the project. Donations to the project are currently managed by Applied Informatics Software Engineering GmbH. As part of a sponsorship agreement, Applied Informatics will provide commercial-grade support to project sponsors. The details are stated in the POCO C++ Libraries Sponsorship And Support Agreement (PDF). Alternatively, we also welcome companies funding the development of a specific feature for POCO.

Sponsorship Levels

Three sponsorship levels are offered: GOLD, SILVER and BRONZE. All sponsorship levels include a sponsor acknowledgement on the website, as well as a certain level of technical support. The minimum sponsorship fees for the three levels are EUR 32.000 for a GOLD sponsorship, EUR 9600 for a SILVER sponsorship and EUR 3200 for a BRONZE sponsorship. Sponsorship fees are for a 12 month period and have to be paid upfront.

Feature Sponsorship

Need a specific non-trivial feature in the POCO C++ Libraries, but don't have the resources to develop it yourself? You can pay the POCO maintainers to implement a feature in POCO. We also have a list of features looking for a sponsor. Please contact the project maintainers for more information.

Become a Sponsor

Becoming a sponsor is via contract (PDF) with Applied Informatics Software Engineering GmbH. If interested in becoming a sponsor, please contact the project maintainers.

You can also donate via PayPal.

Notable Users

The POCO C++ Libraries are used by thousands of projects worldwide, from small open source projects to large commercial projects. Below are some users. Want to be on that list? Let us know.

Open Source

  • ClickHouse is an open source column-oriented database management system capable of real time generation of analytical data reports using SQL queries.
  • The macchina.io IoT application development platform is built on top of POCO.
  • The Mantid project provides a framework that supports high-performance computing and visualisation of materials science data.
  • MQWeb is a web-based administration tool for Websphere MQ by POCO contributor Franky Braem.
  • openFrameworks is an open source C++ toolkit for creative coding.
  • ROS (the Robot Operating System) is a flexible framework for writing robot software.

Commercial

  • AGI
  • Autodesk
  • Avid
  • Cisco
  • CodeLathe is using POCO in FileCloud and Tonido.
  • DMG MORI
  • F5 Networks
  • Honeywell
  • HORIBA
  • Hotlink
  • Kapsch TrafficCom
  • Malwarebytes
  • The MathWorks
  • Micro Focus
  • NetApp
  • NCR
  • Oracle
  • Panasonic
  • Palo Alto Networks
  • Perforce (Helix ALM)
  • Plesk is using POCO in its hosting automation system.
  • Riverbed is using POCO in its SteelCentral NetShark product.
  • Rohde & Schwarz
  • Salesforce (SalesforceIQ)
  • Schneider Electric is using POCO in building automation systems and has been a sponsor of the project.
  • Siemens is using POCO in building automation, smart metering, and other products. They have also sponsored the development of various features.
  • Simba Technologies
  • SmartBear
  • Sony
  • Symantec
  • Thales
  • Veloopti

Note: most of the above list is based on Google searches for open source license acknowledgements mentioning the POCO C++ Libraries, some on direct knowledge.

Features

Design & Implementation

Written in modern, standard ANSI C++, using the C++ Standard Library. Modular design, very few external dependencies, builds out-of-the-box. Good mix of "classic" object-oriented design with modern C++. Clean, easy-to-understand code (we frequently get compliments on that), consistent coding style, comprehensive test suite.

Platforms

Desktop/Server: Windows, Linux, macOS, Solaris, HP-UX, AIX
Embedded/Mobile: Windows Embedded CE, Embedded Linux (uClibc or glibc), iOS, Android, QNX, VxWorks
Minimum system requirements: 75 MHz ARM9, 8 MB RAM (Embedded Linux).

Core Features

Any and DynamicAny classes for dynamic typing
cache framework
date and time
events (signal/slot mechanism) and notifications framework
regular expressions (based on PCRE)
shared libraries and class loading
smart pointers and memory management (buffer, pool)
string formatting and string utilities
tuples

Compression

stream classes for zlib-based compression/decompression
ZIP file creation and extraction

Cryptography

cryptographic hashes
X509 certificate handling
symmetric and RSA ciphers
streams for encryption and decryption
based on OpenSSL

Database

unified access to different SQL databases (SQLite, MySQL, ODBC)
automatic data type mappings
collections support (std::vector, std::set, std::map, etc.)
record sets and tuples
session pooling
MongoDB and Redis clients

Filesystem

platform-independent path construction and manipulation
directory listing
globbing
directory change notifications
file attributes

Logging

extensible logging framework with pluggable log channels and message formatters
console logging, log files, syslog, remote syslog, Windows event log service

Multithreading

thread and thread synchronization classes
thread pool
work queues
active objects and activities
task management
timers

Network

stream, datagram, multicast, server, Unix domain and raw sockets
TCP Server framework (multithreaded)
reactor server framework
HTTP(S) client and server framework
HTTP Basic and Digest authentication
C++ server page compiler for embedding C++ code into HTML pages
FTP client
SMTP and POP3 client for sending and receiving email
URI and UUID handling
HTML forms processing
HTML template compiler
MIME multipart messages
SSL/TLS support based on OpenSSL
WebSocket (RFC 6455) client and server

Processes and IPC

launching and stopping processes
process synchronization
shared memory

Streams

Base64 and HexBinary encoding/decoding
compression (zlib)
line ending conversion
memory streams
text encoding conversions
URI stream opener

Text Encodings

UTF-8 and Unicode handling
text encodings and conversions
character classifications

Utility Classes

frameworks for command-line and server applications
command-line options handling
configuration file parsing
unix daemons and windows services

XML and JSON

fast XML parsing based on Expat
SAX2 (Simple API for XML, version 2) parser
DOM (Document Object Model, Level 1-3) parser
XML writer
JSON parser and writer