Showing posts with label added. Show all posts
Showing posts with label added. Show all posts

Thursday, May 5, 2011

New tool added - ABI Compliance Checker

ABI Compliance Checker (ACC) is an easy-to-use tool for checking backward binary compatibility (BC) of a shared C/C++ library. It checks header files along with shared libraries of old and new versions and analyzes changes in Application Binary Interface (ABI) that may cause compatibility problems: changes in calling stack, v-table changes, removed symbols, etc. Breakage of the binary compatibility may result in crashing or incorrect behavior of applications built with an old version of the library if they run on a new one. The tool is intended for library developers and operating system maintainers who are interested in ensuring binary compatibility, i.e. allow old applications to run with newer library versions without the need to recompile.

  See also: Upstream Tracker for C/C++ libraries; Java ACC prototype.

if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); }

The latest release can be downloaded from this page.

This program is free software. You may use, redistribute and/or modify it under the terms of either the GNU GPL or LGPL.

GNU/Linux, FreeBSD, Haiku (BeOS).

The tool requires GCC (3.0-4.6.0, recommended 4.4 or newer), binutils (c++filt, readelf, objdump) and Perl (base).
WARNING: if you are using ccache program (i.e. g++ points to /usr/lib/ccache/g++) then it should be newer than 3.1.2

The tool searches for the following list of changes in the API that may break binary compatibility:

Removed Symbols (functions, global data) Problems with Data Types Structures: added/removed fields (change of structure layout) change of size changes in fields (recursive analysis) Classes: added/removed virtual functions (change of v-table layout) change of virtual function position overridden virtual functions Enumerations: change of a member value renamed members Problems with Symbols (functions, methods) Stack Frame: added/removed parameters change of parameter type Other: changed attributes change of return value type incorrect version change Problems with Constants (#defines) Problems with Implementation changes in disassembled binary code

You can see detailed problem descriptions in the HTML ABI compliance report (see example) generated by the tool.

For using the tool, you should provide the XML descriptors for two library versions: 1st_version.xml and 2nd_version.xml files. Library descriptor is a simple XML-file that specifies version number, paths to header files and shared libraries and optionally some other information. An example of the descriptor is the following (0.3.4.xml):

0.3.4 /usr/local/libssh/0.3.4/include/ /usr/local/libssh/0.3.4/lib/

Command to compare two versions of a library:
 perl abi-compliance-checker.pl -l -d1 <1st_version.xml> -d2 <2nd_version.xml> 

The compatibility report will be generated to:
 compat_reports//<1st_version>_to_<2nd_version>/abi_compat_report.html 

The ACC tool can be used by ISVs for checking applications portability to new library versions by specifying of its binary using -app option:
 perl abi-compliance-checker.pl -l -d1 -d2 -app  

Found issues can be taken into account when adapting the application to a new library version.

To compare library versions that are not co-existed on one machine you can dump ABI to gzipped TXT format file using -dump option:
 perl abi-compliance-checker.pl -l -dump  

The ABI dump will be generated to:
 abi_dumps//_.abi.tar.gz 

Then transfer and pass it instead of the library descriptor:
 perl abi-compliance-checker.pl -l -d1 -d2  

See the list of all options on this page.

Check the libssh library versions for ABI compatibility:
 perl abi-compliance-checker.pl -l libssh -d1 0.3.4.xml -d2 0.4.0.xml 

The compatibility report will be generated to:
 compat_reports/libssh/0.3.4_to_0.4.0/abi_compat_report.html 

Dump library ABI:
 perl abi-compliance-checker.pl -l libssh -dump 0.3.4.xml 

The ABI will be dumped to:
 abi_dumps/libssh/libssh_0.3.4.abi.tar.gz 

Use previously dumped ABI:
 perl abi-compliance-checker.pl -l libssh -d1 libssh_0.3.4.abi.tar.gz -d2 0.4.0.xml 

Check application (csync) portability between libssh versions:
 perl abi-compliance-checker.pl -l libssh -d1 0.3.4.xml -d2 0.4.0.xml -app /usr/bin/csync 

An excellent tutorial "ABI: stability check" is available at Les RPM de Remi Blog.

See examples of compatibility report:

The report consists of:

Summary - Number of header files, shared libraries, symbols and data types checked by the tool. Verdict on binary compatibility. Problem Summary - Number of binary compatibility problems and added/removed symbols. Added Symbols - List of added symbols. Removed Symbols - List of removed symbols. Problems with Data Types - List of binary compatibility problems caused by changes in data types (divided by the severity level: High, Medium, Low). List of affected symbols. Problems with Symbols - List of binary compatibility problems caused by changes in symbol parameters and attributes (divided by the severity level). Problems with Constants - List of changed constants (#defines). Problems with Implementation - List of changes in disassembled binary code. Use -check-implementation option to enable this section.

Problems with high or medium level of severity or at least one removed symbol lead to incompatible verdict. Problems with low level of severity may be considered as warnings.

What is an ABI and how does it differ from an API?

An Application Binary Interface (ABI) is the set of supported run-time interfaces provided by a software component or set of components for applications to use, whereas an Application Programming Interface (API) is the set of build-time interfaces. The ABI may be defined by the formula:

library API + compiler ABI = library ABIWhy does this tool need both shared libraries and header files to check ABI compliance?

Without header files it is impossible to determine public symbols in ABI and data type definitions. Without shared libraries it is impossible to exactly determine symbols that are included in ABI for the specified library and also impossible to detect added/removed symbols.

icheck - C interface ABI/API checker, BCS - The Symbian Binary Compatibility Suite, shlib-compat - ABI compatibility checker that uses DWARF debug info, qbic - A tool to check for binary incompatibilities in Qt4 Toolkit, chkshlib, cmpdylib, cmpshlib - compare symbols presence.

The main steps of the automated BC analysis are the following:

Automatic detection of include paths for target library headers: Indexing of header files in system directories Recursive search for included header files Create a complete list of GCC -I options to compile headers Parse header files: Create the GCC translation unit (TU) dump for header files Parse the TU dump Create the model of library ABI Parse shared libraries: Extract the list of exported symbols Intersect it with the list of public symbols from header files Create the model of "public" ABI (you can dump it using -dump option) Compatibility check: Compare ABI models of two versions Collect the list of all ABI changes Check it against the list of known BC rules Collect the list of ABI breaks in the library Report generation: Detect the list of affected symbols for each ABI break Group ABI breaks by the level of severity (High, Medium, Low) Generate HTML report

Please send your bug reports, feature requests and questions directly to abi-compliance-checker@linuxtesting.org

The tool was developed by the Russian Linux Verification Center at ISPRAS. Andrey Ponomarenko is the leader of this project.

We would like to thank everyone who has contributed to the success of this project!

Here is the list of articles about shared libraries and ensuring binary compatibility:

KDE TechBase, “Binary Compatibility Issues With C++”, “Binary Compatibility Examples” codesourcery.com, "Itanium C++ ABI" Josh Faust, "ABI Compatibility" Les RPM de Remi - Blog, "ABI : stability check" Agner Fog, “Calling conventions for different C++ compilers and operating systems” Andreas Jonsson, "Calling conventions on the x86 platform" Thiago Macieira, “Some thoughts on binary compatibility” Pavel Shved, Denis Silakov, "Binary Compatibility of C++ shared libraries on GNU/Linux" David J. Brown and Karl Runge, "Library Interface Versioning in Solaris and Linux" HP.com, "Steps to Version Your Shared Library" developer.apple.com, "Macintosh C/C++ ABI Overview" Chad Austin, “Binary-compatible C++ Interfaces” GNU.org, "ABI Policy and Guidelines", "Binary Compatibility" Stephen Clamage, "Stability of the C++ ABI: Evolution of a Programing Language" Debian Library Packaging guide, "When binary compatibility breaks" Sergey Ayukov, "Shared libraries in Linux: growing pains or fundamental problem?" Computer Desktop Encyclopedia, "Application Binary Interface" Linux.org, “Program Library HOWTO” Ulrich Drepper, "How To Write Shared Libraries" Mike Hearn, “Writing shared libraries” KDE TechBase, “Library Code Policy” Peter Potrebic, “What's the Fragile Base Class (FBC) Problem?” symbian.org, "Preserving Compatibility" Ponomarenko A., Rubanov V., VALID 2010 "Automated Verification of Shared Libraries for Backward Binary Compatibility" FreeStandards.org, Generic ABI (gABI) Standard, "ELF and ABI Standards" Processor Supplement ABI (psABI) documents: Intel386, AMD64, PowerPC, S/390, Itanium, ARM, MIPS, SPARC, PA-RISK, M32R

New tool added - mstone

Mstone on SourceForge.net
SourceForge.net Logo

Mstone is a multi-protocol stress and performance measurement tool. Mstone can test multiple protocols (e.g. POP and SMTP) simultaneously and measures the performance of every transaction. The performance can be graphed throughout the duration of the test.

First a bit of history: Netscape Messaging Server includes Mailstone to allow customers to test their mail server installations before public roll out. Mailstone is a benchmark framework for testing mail protocols like POP, IMAP, and SMTP. However, all the new directions for Mailstone are in protocols other than mail. So we changed the name to mstone (think multi-stone) and made the source available so people can develop new tests.

Mstone gives you a lot of detailed information. It does not spit out a standardized "POPmark" number or anything like that. You could standardize a test sequence and combine the detailed numbers using a standard formula, but that's a task for people with great patience.

In order to simulate high load levels and to randomize accesses, mstone can run on multiple test client machines and the results automatically combined when the test is complete. Each client can have multiple processes and multiple threads (limited only by the OS and hardware). Simultaneous connection counts of 100,000 have be performed and higher levels are possible. For long lasting protocols like IMAP and WMAP, this is important for properly stressing the servers.

Mstone currently runs on recent versions of: Linux, Solaris, AIX, OSF, and HPUX. Any OS with POSIX threads support should be an easy port (mostly of the build system). The test client machines can each be running different operating systems. Common utilities like perl, gnuplot, and gd are needed to run mstone.

Tests are defined through workload files and command line arguments. Everything is designed to be repeatable and easily sequenced. The results are available in HTML, plain text, and as a spreadsheet import file (CSV).

Mstone should build and work on all major Unix operating systems. (read Building.txt for more details). Check out the manual. For experimental work (subversion test support, a new build system, and better reporting), check out the development docs and Building.txt. The Subversion revision control system was most recently added. Some other popular revision control systems should follow. See the complete ToDo list for more details.

The 4.2 release is the best tested. SendMail contributed a large number of updates (thanks!). When these are fully integrated, version 5.0 will be released. See NEWS.txt

Wednesday, May 4, 2011

New tool added - API Sanity AutoTest

API Sanity AutoTest (ASAT) is an automatic generator of basic unit tests for shared C/C++ libraries. It is able to generate reasonable (in most, but unfortunately not all, cases) input data for parameters and compose simple ("sanity" or "shallow"-quality) test cases for every function in the API through the analysis of declarations in header files. The quality of generated tests allows to check absence of critical errors in simple use cases. The tool is able to build and execute generated tests and detect crashes (segfaults), aborts, all kinds of emitted signals, non-zero program return code and program hanging. It may be considered as a tool for out-of-the-box low-cost sanity checking (fuzzing) of the library API or as a test development framework for initial generation of templates for advanced tests. Also it supports universal T2C format of tests, random test generation mode, specialized data types and other useful features.

  See also: Upstream Tracker for C/C++ libraries.

  We are looking for sponsorship to continue development of this tool. Please send your proposals to api-sanity-autotest@linuxtesting.org.

if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); }

The latest release can be downloaded from this page.

This program is free software. You may use, redistribute and/or modify it under the terms of either the GNU GPL or LGPL.

GNU/Linux, FreeBSD, Haiku (BeOS), Mac OS X, MS Windows (Xp, Vista, 7).

Linux: GCC (3.0-4.5.2, recommended 4.0 or newer) binutils (c++filt, readelf, objdump) Perl (base)

WARNING: if you are using ccache program (i.e. gcc points to /usr/lib/ccache/gcc) then it should be newer than 3.1.2 or disabled.

MS Windows: MinGW (gcc.exe, c++filt.exe) Active Perl MS Visual C++ (dumpbin.exe, undname.exe, cl.exe) add gcc.exe path (C:\MinGW\bin\) to your system PATH variable run vsvars32.bat script (C:\Microsoft Visual Studio 9.0\Common7\Tools\) Library Version Number of Tests Problems Found Crash (segfault, signal SEGV) Abort (signal ABRT) All emitted signals: FPE, BUS, ILL and others Non-zero exit code Program hanging Requirement failure (if specified)

For generating, building and running tests you should provide the XML descriptor for your library version. It is a simple XML-file that specifies version number, paths to header files and shared libraries and optionally some other information. An example of the descriptor is the following (0.3.4.xml):

0.3.4 /usr/local/libssh/0.3.4/include/ /usr/local/libssh/0.3.4/lib/

Command for generating a test suite:
 perl api-sanity-autotest.pl -l -d -gen 

You can view generated tests using the index file:
 tests///view_tests.html 
or manually in the directory:
 tests///groups/ 

Command for building tests:
 perl api-sanity-autotest.pl -l -d -build 

Command for running tests:
 perl api-sanity-autotest.pl -l -d -run 

After a time will be generated test report:
 test_results///test_results.html 

To improve generated tests quality, you can provide the collection of specialized types for the library.

The tool has many useful options for manipulating with the test generation and execution processes. See the list of all options on this page.

Generate, build and execute the tests for the libssh library:
 perl api-sanity-autotest.pl -l libssh -d 0.3.4.xml -gen -build -run 

Tests will be generated to:
 tests/libssh/0.3.4/groups/ 
 tests/libssh/0.3.4/view_tests.html 

The report will be generated to:
 test_results/libssh/0.3.4/test_results.html 

Generate tests in the Template2Code (T2C) format:
 perl api-sanity-autotest.pl -l libssh -d 0.3.4.xml -gen -t2c 

The package with T2C tests will be generated to:
 tests_t2c/libssh/0.3.4/t2c-libssh-tests-0.3.4.tar.gz 

Execute the tests using the Xvfb server:
 perl api-sanity-autotest.pl -l allegro -d 4.9.21.xml -run -xvfb 

Generate tests using the Splint specifications (annotations) in the headers:
 perl api-sanity-autotest.pl -l popt -d 1.16.xml -gen -splint-specs 

Trinity - The Linux system call fuzzer, iknowthis - A system call fuzzer for UNIX-like systems,

The basic idea of the test data generation algorithm is to recursively initialize parameters of a function using the values returned (or returned through the out-parameter) by other functions for structured data types (class, struct, union) or by some simple values for intrinsic data types (int, float, enum, ...). The recursion step includes the heuristic selection of the appropriate function, that should be called to initialize complex parameters for other functions. If some parameter of a function cannot be initialized, then the algorithm tries to select other function.

Let's see the example test for FT_Activate_Size ( FT_Size size ) function from the FreeType2 library:

#include int main(int argc, char *argv[]) { FT_Library alibrary = 0; FT_Init_FreeType(&alibrary);//initialize "alibrary" FT_Face face = 0; FT_New_Face( alibrary, "sample.ttf", 0, &face);//initialize "face" FT_Size size = 0; FT_New_Size(face, &size);//initialize "size" FT_Activate_Size(size);//target call return 0; }

In this test case the parameter "size" of target function FT_Activate_Size is initialized through the call of FT_New_Size function using its 2nd out-parameter. The first parameter "face" of FT_New_Size function is recursively initialized by the use of FT_New_Face function's 4th out-parameter. And finally the first parameter "alibrary" of FT_New_Face is initialized by the call of FT_Init_FreeType function on the 3rd recursion step. Other parameters of FT_New_Face function are initialized by intrinsic values.

Please send your bug reports, feature requests and questions directly to api-sanity-autotest@linuxtesting.org or post to the issue tracker at forge.ispras.ru

LSB 4.0 certification test suites for Qt3 (9792 interfaces tested), Qt4 (10803 interfaces tested) and libxml2 (1284 interfaces tested) libraries were developed with the help of this tool, also known as "AZOV Framework" in the past (2007-2009).

Add CUnit format support. See 2011 GSoC LSB projects. Extending support of Splint and ACSL annotations. Making better distinction between pointer arguments (*x) and arrays (x[]). More kinds of generated test data files (images, fonts, ...). Option for generating bound values for parameters.

The tool was developed by the Russian Linux Verification Center at ISPRAS. Andrey Ponomarenko is the leader of this project.

We would like to thank everyone who has contributed to the success of this project!

wikipedia.org, “Sanity testing in software development” wikipedia.org, “Fuzz testing” R. S. Zybin , V. V. Kuliamin , A. V. Ponomarenko , V. V. Rubanov and E. S. Chernov, “Automation of broad sanity test generation”

New tool added - Linux Upstream Tracker


This service is aimed on analyzing of the C and C++ libraries evolution.
It is looking for new releases of various libraries and checking them for backward binary compatibility. The web-service is generally intended for operating system maintainers to help in updating libraries and for software developers interested in ensuring backward binary compatibility of the API.

This service is forced by our QA solutions:

Available resources and services:
Search by name: A portable ascii art GFX libraryA library providing a non-interactive canvas for generating technical drawingsAdvanced Linux Sound ArchitectureAn asynchronous resolver libraryThe official C++ interface for the ATK accessibility toolkit libraryAn open-source molecular builder and visualization toolGPL C++ library for interfacing with the RIM BlackBerry HandheldOfficial Linux Bluetooth protocol stackThe Bonobo Component System for the GNOME Desktop PlatformC library that performs DNS requests and name resolves asynchronouslyAn audio CD reading utility which includes extra data verification featuresC++ library for creating CGI (Common Gateway Interface) programsThe CELT ultra-low delay audio codecA FITS File Subroutine LibraryGPU Shader Authoring Language (NVIDIA)C++ class library for writing CGI applicationsA library for dealing with Microsoft CHM filesAn open source (GPL) anti-virus toolkit for UNIXClassified Advertisements (ClassAds) are the lingua franca of CondorOpen source library for creating fast, compelling, portable, and dynamic graphical user interfacesThe Corosync Cluster Engine is a Group Communication System with additional features for implementing high availability within applicationsNVIDIA’s parallel computing architectureGPU-accelerated linear algebra libraryThe Common UNIX Printing SystemA full featured cross-platform Image LibraryExtensible Binary Meta-LanguageData encode/decode and storage libraryAn MPEG-4 and MPEG-2 AAC encoderC++ wrapper for fam from sgi.famA BSD-licensed C++ forward error correction libraryThe leading audio/video codec libraryAn embeddable cross-platform database engineA world-leading library for the creation and playback of interactive audioFont configuration and customization libraryA Free, High-Quality, and Portable Font EngineAn open source code library for the dynamic creation of images by programmers. GD creates PNG, JPEG and GIF images, among other formatsGeospatial Data Abstraction LibraryA set of database routines that use extensible hashingThe library for image loading and manipulation.A C++ port of the Java Topology Suite (JTS)The GNU internationalisation libraryThe OpenGL Extension Wrangler LibraryGLib provides the fundamental algorithmic language constructs commonly duplicated in applicationsAn implementation of the Unicode Bidirectional Algorithm (bidi)An implementation of Session Initiation Protocol (SIP)An implementation of the Simple Authentication and Security Layer framework and a few common SASL mechanismsThe GNU Transport Layer Security LibraryA C language library that allows to add support for cryptography to a programGeneric Security Service, a free implementation of RFC 2743/2744Implements resource discovery and announcement over SSDPA library for constructing graphs of media-handling componentsA well-groomed and well-maintained collection of GStreamer plug-insThe library for creating graphical user interfacesAn object-oriented open source framework for creating UPnP devices and control pointsA library for storing and managing dataThe Internet Communications EngineProvide Unicode and Globalization support for software applicationsA software suite to create, edit, and compose bitmap imagesThe platform-independent ODBC SDKPortable c++ library easily as Java. Include sockets, threads, io, logger, process management, graphical interface (DirectFB), and more.A library providing serialization and deserialization support for the JavaScript Object Notation (JSON) format described by RFC 4627C++ library to facilitate sending email programmaticallyA set of utilities for managing the key retention facility in the kernelA high quality MPEG Audio Layer III (MP3) encoder licensed under the LGPLSUSv2 interface to Linux kernel asynchronous I/OA cross platform audio libraryAn advanced on screen display (OSD) libraryThe library for high-performance 2D graphicsA Qt library that implements the Open Collaboration Services APIThe Audio File Library handles reading and writing audio files in many common formatsA library to record, convert and stream audio and videoThe industry-standard colour ASCII-art libraryAn implementation of the XDG Sound Theme and Name Specifications, for generating event sounds on free desktops, such as GNOMEA library for getting and setting POSIX.1e (formerly POSIX 6) draft 15 capabilitiesThe library is intended to make programming with posix capabilities much easier than the traditional libcap libraryThe Common ISDN Application Programming Interface (CAPI)C library to access data on a CDDB server (freedb.org)The multiprotocol file transfer libraryThe database-independent abstraction layer in CDiscovers, activates, deactivates and displays properties of software RAID sets (eg, ATARAID) and contained DOS partitionsELF object file access libraryA library for support of the Expert Witness Compression Format (EWF)Loki C++ library from Modern C++ DesignA Portable Foreign Function Interface LibraryA simple programming interface for decoding and encoding audio data using the Xiph.org codecs (FLAC, Speex and Vorbis)The GNU project's basic cryptographic libraryA fast, simple, small and flexible user-space graphics libraryA flexible library for input handlingAn ncurses toolkit for creating text-mode graphical user interfaces in a fast and easy wayA small library with error codes and descriptions shared by most GnuPG related softwareA standardized API used to convert between different character encodingsImplementation of the Infinote protocol (infinote.org) written in GObject-based CThe generic API allowing a driver to expose to the user space configuration and statistics specific to common Wireless LANsA library for manipulating JPEG image format filesA high-speed version of libjpegThe Mozilla's C implementation of JavaScript (SpiderMonkey)A JSON reader and writer which is super-effiecient, which runs circles around any other competing JSON engineC++ output stream interface for writing Postscript documents containing any of the world's scripts supported by Unicode 4.0 and by PangoThe runtime library from GNU libtoolAn open source C/C++ client library and tools for the memcached serverA useful collection of routines for programming. Performance and usability-oriented extensions to C.Mozilla's spidermonkey javascript engineThe abstraction layer around libmpdclient. It provides a high level access to MPD.A stable, documented, asynchronous API library for interfacing MPD in the C, C++ and Objective C languagesAn HTTP and WebDAV client library, with a C interfaceA set of co-operative tools that make networking simple and straightforwardA general purpose, double precision, Celestial Mechanics, Astrometry and Astrodynamics libraryA library that implement Microsoft's NTLM authenticationC library to generate ICMP echo requestsLibrary of Optimized Inner Loops (Oil) Runtime Compiler (Orc)Pluggable Authentication Modules for LinuxA system-independent interface for user-level packet captureThe pixel-manipulation library for X and cairoReference library for supporting the Portable Network Graphics (PNG) formatThe command-line option parsing libraryConverts Outlook PST files to mailbox and others formatsThe C library for quantum computing and quantum simulationSample Rate Converter for audioA free package management library, using SAT technology to solve requestsThe Security Enhanced Linux libraryProvides an API for the manipulation of SELinux binary policiesAllows programs to easily modify SELinux policy binariesThe X11 Inter-Client Exchange libraryProviding access to as much BIOS information as possibleA library for reading and writing files containing sampled sound through one standard library interfaceThe HTTP client/server library for GNOMEA small library for rendering Postscript documentsA patent-free audio compression format designed for speechSimple pop3 mail client libraryThe client-side C library implementing the SSH2 protocolThe Flexible Communications FrameworkFree and open video compression formatThe library for manipulating TIFF image format filesProvides a set of functions for accessing the udev database and querying sysfsThe library for writing single instance applicationThe Universal Plug and Play (UPnP) SDK for Linux provides support for building UPnP-compliant control points, devices, and bridges on LinuxThe library to enable user space application programs to communicate with USB devicesGeneral-purpose compressed audio format for mid to high quality audioThe library for importing WordPerfect (tm) documentsA client interface to the X Window SystemThe X11 Cursor management libraryThe X11 miscellaneous extensions libraryThe Xinerama Extension libraryThe C++ wrapper for the libxml XML parser libraryThe X11 toolkit intrinsics libraryThe X Record and X Test extensions libraryX11 XFree86 video mode extension libraryThe C library for reading, creating, and modifying zip archivesA new userspace toolset that provide logical volume management facilities on linuxA high-quality MPEG audio decoderAn embedded SSL and TLS implementation designed for small footprint applications and devicesA scalable, high-performance, open source, document-oriented databaseThe fast and free console based real time MPEG Audio Player for Layer 1, 2 and 3Kernel multi-touch transformation libraryThe MXP library implements the parser for the MUD eXtension protocol. This protocol aims to provide a better experience for MUD playersA very fast, multi-threaded, multi-user, and robust SQL (Structured Query Language) database serverA C++ wrapper for MySQL’s C APILibrary for developing network-based applicationsThe C++ netCDF DAP2 Client LibraryThe OpenAIS Standards Based Cluster Framework is an OSI Certified implementation of the Service Availability Forum Application Interface Specification (AIS)A cross-platform 3D audio API appropriate for use with gaming applications and many other types of audio applicationsA chemical toolbox designed to speak the many languages of chemical dataA library of programming functions for real time computer visionThe OpenLDAP Lightweight Directory Access Protocol APIAn open source PAM library that focuses on simplicity, correctness, and cleanlinessOpen Robotics Automation Virtual EnvironmentA FREE version of the SSH connectivity toolsThe NVIDIA® OptiX™ Ray Tracing EngineOS Abstraction Layer library from NASA/GSFCA system designed to make installing and updating software on your computer easierThe library for layout and rendering of internationalized textPerl Compatible Regular ExpressionsA multimedia API for KDE developersCross-platform software package for creating scientific plotsC++ class libraries that simplify and accelerate the development of network-centric, portable applications in C++An application-level toolkit for defining and handling the policy that allows unprivileged processes to speak to privileged processesA PDF rendering library based on the xpdf-3.0 code basePortable Cross-Platform Audio I/O LibraryA powerful, open source object-relational database systemAn intelligent predictive text entry systemCartographic Projections LibraryA Qt Cryptographic ArchitectureA qt-based library that maps JSON data to QVariant objectsA collection of APIs and frameworksCross-platform application and UI frameworkC library to communicate with network devices by MikroTik running their Linux-based operating system RouterOSA library for performing atomic creation and replacement of filesThe SceniX scene management engineA cross-platform implementation of the Dirac video compression specification as a C libraryThe main core of the Spatial DBMS engineIntel® Threading Building BlocksA port of Suns Transport-Independent RPC library to LinuxA graphical user interface toolkitAn open source project that implements the ODBC APIAn implementation of the GEIS (Gesture Engine Interface and Support) interfaceGesture Recognition And Instantiation LibraryGoogle's open source JavaScript engineVideo Decode and Presentation API for UnixThe X C-language Bindings libraryThe Xen® hypervisor, the powerful open source industry standard for virtualizationA fast, flexible and reliable cross-platform database engine derived from FLAIMA modular implementation of XML-RPC for C and C++The Xvid video codec implements MPEG-4 Simple Profile and Advanced Simple Profile standardsThe zlib compression and decompression libraryTimeline of unintentional ABI breaks

New tool added - Binary Analysis Tool (BAT)

The Binary Analysis Tool (BAT) makes it easier and cheaper to look inside binary code, find compliance issues, and reduce uncertainty when deploying Free and Open Source Software. It is a modular framework that assists compliance and due diligence activities by using the same type of approach applied by gpl-violations.org to discover issues in consumer electronics. BAT is available for free under the Apache license so that everyone can use, study, share and improve it.

BAT can detect Redboot, loadlin and uboot bootloaders, open ZIP, RAR, tar, cpio and LZMA archives, search for Linux kernel and Busybox issues, identify dynamically linked libraries and report outcomes in XML format. It also features knowledge-base support to allow high fidelity customization for advanced users.

Version 4 of the tool was released on the 17th of January 2011. It introduces easy to install package files for RPM and DEB operating systems, a re-written XML file format that is easier to read, use and customize, and a switch of database from PyLucene to SQLite for dramatically improved speed in brute force scans.

The Binary Analysis Tool was created by Loohuis Consulting and Opendawn. Initial development was sponsored by NLnet Foundation, and further development has been sponsored by Linux Foundation

New tool added - CallbackParams

On top of being yet-another-parameterized-testing-framework CallbackParams separates itself through at least three defining features ...

The framework takes care of combining the parameter-values. This might look like a cheap way to generate many tests with little code but as can be seen here and here the great advantage is the improved maintainability that is released when the burden of combining parameter-values is eliminated.

The combined parameter-values are not accessed directly but through a callback-interface by invoking any of its callback-methods. An invocation of a callback-method works as a composite invocation on those parameter-values that offer an implementation of the corresponding callback-interface.

This means that parameterized data is always accessed indirectly through callback-interfaces. (With traditional parameterization the parameterized data is usually primitive and accessed directly - each parameter-value separately.)

More pedagogic examples on how this actually works can be found in the tutorial article Patterns That Simplify Maintenance.

The preferred way to run CallbackParams tests is to annotate the test-class:

import org.callbackparams.junit4.CallbackParamsRunnerimport org.junit.runner.RunWith@RunWith(CallbackParamsRunner.class)public class MyParameterizedTest {

CallbackParamsRunner is an implementation of Runner, which is implemented by many other JUnit Add-Ons out there. Almost all of these runners assume you choose between different ~end-to-end~ runners for your test, i.e. a test can be run with prominent runners such as PowerMockRunner or SpringJUnit4ClassRunner - but not both at the same time!!!

CallbackParamsRunner, however, is much less instrusive, because it only concerns itself with test-parameterization and leaves the actual test-execution to some other suitable runner, which can be explicitly specified with the annotation @org.callbackparams.junit4.WrappedRunner:

@RunWith(CallbackParamsRunner.class)@WrappedRunner(PowerMockRunner.class)public class MyParameterizedPowerMockTest {

... or ...

@RunWith(CallbackParamsRunner.class)@WrappedRunner(SpringJUnit4ClassRunner.class)public class MyParameterizedSpringTest {

This approach to test-parameterization can be described in terms of AOP. JUnit's annotation @RunWith exposes a pointcut. The class CallbackParamsRunner acts as an advice for this pointcut by making the necessary modifications to the test-class and then delegates test-execution back to JUnit's built-in Runner implementation or to the specified third-party implementation, which in turn can be regarded as the next advice for the pointcut.

New tool added - Litmus

Litmus is the new integrated testcase management and QA tool that is designed to improve workflow, visibility, and turnaround time in the Mozilla QA process.

It was originally designed as a replacement for Testrunner, but also has additional functionality.

if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); }

Litmus does:

make it easier for casual testers to assist with testing Mozilla products; serve as a repository for test cases, with all the inherent management abilities that implies; serve as a repository for test results, carrying over the best features of Testrunner, e.g. test lists, division of labor, etc.; provide a query interface for viewing, reporting on, and comparing test results; expose a web services interface for the mechanical batch submission of testing results.

Litmus does not:

manage the automation of testing requests as a centralized test scheduler or daemon. The majority of testing we do, and all of the community testing that we know of, is still done by hand. This doesn't preclude such functionality in the future, but we need to figure out the intricacies of how to automate a larger proportion of our daily testing before it makes sense to spend too much time on scheduling those automated tests. Existing automation frameworks will be able to submit results via web services.

Interested in helping with Litmus? Start here.

Litmus is released under the MPL.