|
|
Log in / Subscribe / Register

Development

LPC: The past, present, and future of Linux audio

By Jake Edge
October 7, 2009

The history, status, and future of audio for Linux systems was the topic of two talks—coming at the theme from two different directions—at the Linux Plumbers Conference (LPC). Ardour and JACK developer Paul Davis looked at audio from mostly the professional audio perspective, while PulseAudio developer Lennart Poettering, unsurprisingly, discussed desktop audio. Davis's talk ranged over the full history of Linux audio and gave a look at where he'd like to see things go, while Poettering focused on the changes since last year's conference and "action items" for the coming year.

Davis: origins and futures

Davis started using Linux as the second employee at Amazon in 1994, and started working on audio and MIDI software for Linux in 1998. So, he has been working in Linux audio for more than ten years. His presentation was meant to provide a historical overview on why "audio on linux still sucks, even though I had my fingers in all the pies that make it suck". In addition, Davis believes there are lessons to be learned from the other two major desktop operating systems, Windows and Mac OS X, which may help in getting to better Linux audio.

He outlined what kind of audio support is needed for Linux, or, really, any operating system. Audio data should be able to be brought in or sent out of the system via any available audio interface as well as via the network. Audio data, as well as audio routing information, should be able to be shared between applications, and that routing should be able to changed on the fly based on user requests or hardware reconfiguration. There needs to be a "unified approach" to mixer controls, as well. Most important, perhaps, is that the system needs to be "easy to understand and to reason about".

Some history

Linux audio support began in the early 1990s with the Creative SoundBlaster driver, which became the foundation for the Open Sound System (OSS). By 1998, Davis said, there was growing dissatisfaction with the design of OSS, which led Jaroslav Kysela and others to begin work on the Advanced Linux Sound Architecture (ALSA).

Between 1999 and 2001, ALSA was redesigned several times, each time requiring audio applications to change because they would no longer compile. The ALSA sequencer, a kernel-space MIDI router, was also added during this time frame. By the end of 2001, ALSA was adopted as the official Linux audio system in favor instead of OSS. But, OSS didn't disappear and is still developed and used both on Linux and other UNIXes.

In the early parts of this decade, the Linux audio developer community started discussing techniques for connecting audio applications together, something that is not supported directly by ALSA. At roughly the same time, Davis started working on the Ardour digital audio workstation, which led to JACK. The audio handling engine from Ardour was turned into JACK, which is an "audio connection kit" that works on most operating systems. JACK is mostly concerned with the low-latency requirements of professional audio and music creation, rather than the needs of desktop users.

Since that time, the kernel has made strides in supporting realtime scheduling that can be used by JACK and others to provide skip-free audio performance, but much of that work is not available to users. Access to realtime scheduling is tightly controlled, so there is a significant amount of per-system configuration that must be done to access this functionality. Most distributions do not provide a means for regular users to enable realtime scheduling for audio applications, so most users are not benefiting from those changes.

In the mid-2000s, Poettering started work on the PulseAudio server, KDE stopped using the aRts sound server, GStreamer emerged as a means for intra-application audio streaming, and so on. Desktops wanted "simple" audio access APIs and created things like Phonon and libsydney, but meanwhile JACK was the only way to access Firewire audio. All of that led to great confusion for Linux audio users, Davis said.

Audio application models

At the bottom, audio hardware works in a very simple manner. For record (or capture), there is a circular buffer in memory to which the hardware writes, and from which the software reads. Playback is just the reverse. In both cases, user space can add buffering on top of the circular buffer used by the hardware, which is useful for some purposes, and not for others.

There are two separate models that can be used between the software and the hardware. In a "push" model, the application decides when to read or write data and how much, while the "pull" model reverses that, requiring the hardware to determine when and how much I/O needs to be done. Supporting a push model requires buffering in the system to smooth over arbitrary application behavior. The pull model requires an application that can meet deadlines imposed by the hardware.

Davis maintains that supporting push functionality on top of pull is easy, just by adding buffering and an API. But supporting pull on top of push is difficult and tends to perform poorly. So, audio support needs to be based on the pull model at the low levels, with a push-based API added in on top, he said.

Audio and video have much in common

OSS is based around the standard POSIX system calls, such as open(), read(), write(), mmap(), etc., while ALSA (which supports those same calls) is generally accessed through libasound, which has a "huge set of functions". Those functions provide ways to control hardware and software configuration along with a large number of commands to support various application styles.

In many ways, audio is like video, Davis said. Both generate a "human sensory experience" by rescanning a data buffer and "rendering" it to the output device. There are differences as well, mostly in refresh rates and the effect of missing refresh deadlines. Unlike audio, video data doesn't change that frequently when someone is just running a GUI—unless they are playing back a video. Missed video deadlines are often imperceptible, which is generally not true for audio.

So, Davis asked, does anyone seriously propose that video/graphics applications should talk to the hardware directly via open/read/write/etc.? For graphics, that has been mediated by a server or server-like API for many years. Audio should be the same way, even though some disagree, "but they are wrong", he said.

The problem with UNIX

The standard UNIX methods of device handling, using open/read/write/etc., are not necessarily suitable interfaces for interacting with realtime hardware. Davis noted that he has been using UNIX for 25 years and loves it, but that the driver API lacks some important pieces for handling audio (and video). Both temporal and data format semantics are not part of that API, but are necessary for handling that audio/video data. The standard interfaces can be used, but don't promote a pull-based application design.

What is needed is a "server-esque architecture" and API that can explicitly handle data format, routing, latency inquiries, and synchronization. That server would mediate all device interaction, and would live in user space. The API would not require that various services be put into the kernel. Applications would have to stop believing that they can and should directly control the hardware.

The OSS API must die

The OSS API requires any services (like data format conversion, routing, etc.) be implemented in the kernel. It also encourages applications to do things that do not work well with other applications that are also trying to do some kind of audio task. OSS applications are written such that they believe they completely control the hardware.

Because of that, Davis was quite clear that the "OSS API must die". He noted that Fedora no longer supports OSS and was hopeful that other distributions would follow that lead.

When ALSA was adopted, there might have been an opportunity to get rid of OSS, but, at the time, there were a number of reasons not to do that, Davis said. Backward compatibility with OSS was felt to be important, and there was concern that doing realtime processing in user space was not going to be possible—which turned out to be wrong. He noted that even today there is nothing stopping users or distributors from installing OSS, nor anything stopping developers from writing OSS applications.

Looking at OS X and Windows audio

Apple took a completely different approach when they redesigned the audio API for Mac OS X. Mac OS 9 had a "crude audio architecture" that was completely replaced in OS X. No backward compatibility was supported and developers were just told to rewrite their applications. So, the CoreAudio component provides a single API that can support users on the desktop as well as professional audio applications.

On the other side of the coin, Windows has had three separate audio interfaces along the way. Each maintained backward compatibility at the API level, so that application developers did not need to change their code, though driver writers were required to. Windows has taken much longer to get low latency audio than either Linux or Mac OS X.

The clear implication is that backward compatibility tends to slow things down, which may not be a big surprise.

JACK and PulseAudio: are both needed?

JACK and PulseAudio currently serve different needs, but, according to Davis, there is hope that there could be convergence between them down the road. JACK is primarily concerned with low latency, while PulseAudio is targeted at the desktop, where application compatibility and power consumption are two of the highest priorities.

Both are certainly needed right now, as JACK conflicts with the application design of many desktop applications, while PulseAudio is not able to support professional audio applications. Even if an interface were designed to handle all of the requirements that are currently filled by JACK and PulseAudio, Davis wondered if there were a way to force the adoption of a new API. Distributions dropping support for OSS may provide the "stick" to move application developers away from that interface, but could something similar be done for a new API in the future?

If not, there are some real questions about how to improve the Linux audio infrastructure, Davis said. The continued existence of both JACK and PulseAudio, along with supporting older APIs, just leads to "continued confusion" about what the right way to do audio on Linux really is. He believes a unified API is possible from a technical perspective—Apple's CoreAudio is a good example—but it can only happen with "political and social manipulation".

Poettering: The state of Linux audio

The focus of Poettering's talk was desktop audio, rather than embedded or professional audio applications. He started by looking at what had changed since last year's LPC, noting that EsounD and OSS were officially gone ("RIP"), at least in Fedora. OSS can still be enabled in Fedora, but it was a "great achievement" to have it removed, he said.

There were only bugs reported against three applications because of the OSS removal, VMware and quake2 amongst them. He said that there "weren't many complaints", but an audience member noted the "12,000 screaming users" of VMware as a significant problem. Poettering shrugged that off, saying that he encouraged other distributions to follow suit.

Confusion at last year's LPC led him to create the "Linux Audio API Guide", which has helped clarify the situation, though there were complaints about what he said about KDE and OSS.

Coming in Fedora 12, and in other distributions at "roughly the same time", is using realtime scheduling by default on the desktop for audio applications. There is a new mechanism to hand out realtime priority (RealtimeKit) that will prevent buggy or malicious applications from monopolizing the CPU—essentially causing a denial of service. The desktop now makes use of the high-resolution timers, because they "really needed to get better than 1/HZ resolution" for audio applications.

Support for buffers of up to 2 seconds has been added. ALSA used to restrict the buffer size to 64K, which equates to 70ms 370ms of CD quality audio. Allowing bigger buffers is "the best thing you can do for power consumption" as well as dropouts, he said.

Several things were moved into the audio server, including timer-based audio scheduling which allows the server to "make decisions with respect to latency and interrupt rates". A new mixer abstraction was added, even though there are four existing already in ALSA. Those were very hardware specific, Poettering said, while the new one is a very basic abstraction.

Audio hardware has acquired udev integration over the last year, and there is now "Bluetooth audio that actually works". Poettering also noted that audio often didn't work "out of the box" because there was no mixer information available for the hardware. Since last year, an ALSA mixer initialization database has been created and populated: "It's pretty complete", he said.

Challenges for the next year

There were a number of issues with the current sound drivers that Poettering listed as needing attention in the coming year. Currently, for power saving purposes, PulseAudio shuts down devices two seconds after they become idle. That can lead to problems with drivers that make noise when they are opened or closed.

In addition, there are areas where the drivers do not report correct information to the system. Decibel range of the device is one of those, along with the device strings that are either broken or missing in many drivers, which makes it difficult to automatically discover the hardware. The various mixer element names are often wrong as well; in the past it "usually didn't matter much", but it is becoming increasingly important for those elements to be consistently named by drivers. Some drivers are missing from the mixer initialization database, which should be fixed as well.

The negotiation logic for sample rates, data formats, and so on are not standardized. The order in which those parameters are changed can be interpreted differently by each driver which leads to problems at the higher levels, he said. There are also problems with timing for synchronization between audio and video that need to be addressed at the driver level.

Poettering also had a whole slew of changes that need to be made to the ALSA API so that PulseAudio (and others) can get more information about the hardware. Things like the routing and mixer element mappings as well as jack status (and any re-routing that is done on jack insertion) and data transfer parameters such as the timing and the granularity of transfers. Many of the current assumptions are based on consumer-grade hardware which doesn't work for professional or embedded hardware, he said. It would be "great if ALSA could give us a hint how stuff is connected".

There is also a need to synchronize multiple PCM clocks within a device, along with adding atomic mixer updates that sync to the PCM clock. Latency control, better channel mapping, atomic status updates, and HDMI negotiation are all on his list as well.

Further out, there are a number of additional problems to be solved. Codec pass-through—sending unaltered codec data, such as SPDIF, HDMI, or A2DP, to the device—is "very messy" and no one has figured out how to handle synchronization issues with that. There is a need for a simpler, higher-level PCM API, Poettering said, so that applications can use the pull model, rather than being forced into the push model.

Another area that needs work is handling 20 second buffering. There are a whole new set of problems that come with that change. As an example, Poettering pointed out the problems that can occur if the user changes some setting after that much audio data has been buffered. There need to be ways to revoke the data that has been buffered or there will be up to 20 second lags between user action and changes to the audio.

Conclusion

Both presentations gave a clear sense that things are getting better in the Linux audio space, though perhaps not with the speed that users would like to see. Progress has clearly been made and there is a roadmap for the near future. Whether Davis's vision of a unified API for Linux audio can be realized remains to be seen, but there are lots of smart hackers working on Linux audio. Sooner or later, the "one true Linux audio API" may come to pass.

Comments (32 posted)

System Applications

Audio Projects

New Music Player Daemon releases

Several new packages are available from the Music Player Daemon project including mpc-0.18, libmpdclient-2.0 and mpd-0.15.4. "Music Player Daemon (MPD) is a flexible, powerful, server-side application for playing music. Through plugins and libraries it can play a variety of sound files while being controlled by its network protocol."

Comments (none posted)

PulseAudio 0.9.19 released

Version 0.9.19 of the PulseAudio sound server has been announced. "A handful of minor fixes and translation updates." See the changes document for details.

Comments (none posted)

Database Software

Elixir 0.7.0 released

Version 0.7.0 of Elixir has been announced, it includes several bug fixes. "Elixir is a declarative layer on top of the SQLAlchemy library. It is a fairly thin wrapper, which provides the ability to create simple Python classes that map directly to relational database tables (this pattern is often referred to as the Active Record design pattern), providing many of the benefits of traditional databases without losing the convenience of Python objects."

Full Story (comments: none)

Ingres Database 9.3 released

Here's a press release announcing the availability of Ingres Database 9.3. New features include PAM support and more support for Java applications. The big push, though, seems to be on migration from other databases: "'As the fate of MySQL is currently in the hands of the European Commission, open source community developers and our global business customers and partners are seeking a more stable, reliable open source database,' said Deb Woods, vice president of product management, Ingres. 'Ingres Database 9.3 is designed to meet their needs with an easy migration path to Ingres and we encourage anyone looking for an alternative to consider migration today'"

Full Story (comments: 30)

PostgreSQL Weekly News

The October 4, 2009 edition of the PostgreSQL Weekly News is online with the latest PostgreSQL DBMS articles and resources.

Full Story (comments: none)

Interoperability

Samba announces four security releases

The Samba project has announced four new security releases. Samba 3.0.37, Samba 3.2.15, Samba 3.3.8 and Samba 3.4.2. All four releases address three security issues.

Comments (none posted)

Networking Tools

OpenSSH 5.3 released

OpenSSH 5.3 is out. It's a fairly routine bugfix release, but it also celebrates an important anniversary: "This release marks the 10th anniversary of the OpenSSH project. We would like to thank the OpenSSH community for their support, especially those who will continue to contribute code or patches, report bugs, test snapshots or donate to the project during the next 10 years."

Full Story (comments: none)

Web Site Development

Grok 1.0 released

Version 1.0 of Grok has been announced. "The Grok development team is very happy to release Grok 1.0. Grok 1.0 is the culmination of 3 years of work after the start of the Grok project in late 2006. It presents a stable platform for developing powerful, extensible web applications. Grok is the result of years of work by the large Grok development team."

Full Story (comments: none)

TurboGears 1.1 final released

Version 1.1 final of TurboGears a web meta-framework, has been announced. "TurboGears 1.1 is the first stable release of the TurboGears 1.1 branch, which is the evolution of the TurboGears 1 codebase. The 1.1 branch now uses SQLAlchemy as the default database layer and Genshi as the standard templating engine but is 100 percent compatible with applications built on TurboGears 1.0."

Full Story (comments: none)

Miscellaneous

Orocos Bayesian Filtering Library 0.7.0 released

Version 0.7.0 of the Bayesian Filtering Library from the Orocos robotics control system has been announced. "This release includes support for lti, boost and newmat as matrix library and lti and boost as random number generator. New features include: * RTT toolkit for BFL (now supporting boost) * uniform probability density functions * mixture probability density functions * histogram filters * mixture particle filters".

Comments (none posted)

Desktop Applications

Audio Applications

Amarok 2.2 "Sunjammer" released (KDE.News)

KDE.News covers the release of the Amarok 2.2 music player. "Many weeks have passed since our last version, and so many changes and improvements have found their way into version 2.2. Over all, the team is quite proud of all the improvements and was lucky to be able to plan and coordinate those in two developer sprints, one in Berlin and one during the Gran Canaria Desktop Summit, made possible by your support for Amarok and KDE. To put this into perspective: In the last three and a half months we closed 654 bugs, made close to 2200 commits to the code, of which more than a hundred were made in the first 24 hours after the release of version 2.1.1. The code statistics show that we changed a total of 1935 files, wrote 101693 new lines, and removed 73774 obsolete lines of code."

Comments (none posted)

Data Visualization

python-graph 1.6.2 released

Version 1.6.2 of python-graph has been announced. "The 1.6.x series is our refactoring series. Along the next releases, we'll change the API so we can better prepare the codebase to new features. If you want a softer, directed transition, upgrade your code to every release in the 1.6.x series. On the other hand, if you'd rather fix everything at once, you can wait for 1.7.0."

Full Story (comments: none)

Desktop Environments

Back on GNOME Bugzilla: weekly-bug-summary, describeuser

Some GNOME reports have been relaunched. "Thanks to Frederic Peters, we have the following reports again: 1. https://bugzilla.gnome.org/page.cgi?id=weekly-bug-summary... This URL has changed as it is now an extension. 2. https://bugzilla.gnome.org/page.cgi?id=describeuser.html This URL has changed as it is now an extension. Every mailto: link on show_bug.cgi (and so on) links to above report. 3. Patch report is now linked from browse.cgi."

Full Story (comments: none)

GNOME Software Announcements

The following new GNOME software has been announced this week: You can find more new GNOME software releases at gnomefiles.org.

Comments (none posted)

KDE 4.3.2 is available (KDEDot)

KDE.News has announced the release of KDE 4.3.2. "KDE 4.3.2 brings a nice number of bug fixes including crashers. UI issues have been ruled out in KMail, and KWin effects have become more stable. There is also a good number of fixes in KDE's core libraries, which are beneficial to all applications using KDE libraries."

Comments (none posted)

KDE Software Announcements

The following new KDE software has been announced this week: You can find more new KDE software releases at kde-apps.org.

Comments (none posted)

Xorg Software Announcements

The following new Xorg software has been announced this week: More information can be found on the X.Org Foundation wiki.

Comments (none posted)

Desktop Publishing

AsciiDoc 8.5.0 released

Version 8.5.0 of AsciiDoc, an uncomplicated text document format for writing articles, documentation, manuals, books and UNIX man pages, has been announced. "This release includes lots of enhancements, but the big news is that the a2x toolchain wrapper has been rewritten in Python and now supports the EPUB e-book standard."

Full Story (comments: none)

Encryption Software

python-gnupg 0.2.2 released

Version 0.2.2 of python-gnupg has been announced. "A new version of the Python module which wraps GnuPG has been released. This is a minor bug-fix release."

Full Story (comments: none)

Financial Applications

Gnucash 2.3.7 released

Version 2.3.7 of Gnucash has been announced. "The GnuCash development team proudly announces GnuCash 2.3.7, the eighth of several unstable 2.3.x releases of the GnuCash Free Accounting Software which will eventually lead to the stable version 2.4.0. With this new release series, GnuCash can use an SQL database using SQLite3, MySQL or PostgreSQL."

Full Story (comments: none)

SQL-Ledger 2.8.25 released

Version 2.8.25 of SQL-Ledger, a web-based double entry accounting/ERP system, has been announced. Changes include: "1. Version 2.8.25 2. added customer and vendor import function 3. added variables for remittance forms and reminder notices 4. added companyemail and companywebsite variables 5. fixed internal notes display for new transactions 6. added modulo calculation for spoolfiles 7. import payments with DCN for open and closed transactions 8. added message handling for admin locks 9. fixed emtpy line issue with template editor".

Comments (none posted)

Games

Humerus 2.1 released

Version 2.1 of Humerus has been announced, it includes some code rework. "Humerus is a companion to the Albow widget library for PyGame. It provides a framework for games made up of a sequence of levels, including user interface and back-end logic for saving and restoring game state, loading levels, and sundry other details. There is also optional support for a built-in level editor, including code for loading and saving levels to be edited, and asking whether to save modified levels."

Full Story (comments: none)

Mail Clients

Stresstesting IMAP clients (Hackvalue)

Over at the Hackvalue weblog, Armijn Hemel compares IMAP client performance. He created 12,000 test emails and then looked at how well several clients (Evolution, KMail, Thunderbird, and Claws Mail) could download the messages as well as how they performed moving them between accounts. "In the past I have had to move quite a bit of mail around between IMAP servers, which usually worked just fine, apart from taking some resources. Other people I talked to had different experiences, including crashes and suspicions of emails being lost. This triggered the idea of testing a few graphical email programs for IMAP performance: how would they behave if you had a huge amount of mails that you wanted to move to a different account?"

Comments (46 posted)

Multimedia

liboggz 1.0.1 released

Version 1.0.1 of liboggz has been announced. "This release corrects timestamp calculation for Theora files with duplicate frames, which are produced by the recently-released libtheora-1.1 encoder."

Full Story (comments: none)

Music Applications

csound ifn parser and tools 1.04 released

Version 1.04 of csound ifn parser and tools has been announced. "ifn parser is a parser to help in combing csound instruments also tools that may be usefull for code editors including a ifn number locater and a depreceated csound command locater. The ifn number, and depreceated number list may be usefull regardless of the programming language".

Full Story (comments: none)

Office Suites

OpenOffice.org Newsletter

The September, 2009 edition of the OpenOffice.org Newsletter is out with the latest OO.o office suite articles and events.

Full Story (comments: none)

Miscellaneous

BleachBit 0.6.5 released

Version 0.6.5 of BleachBit has been announced. "BleachBit (pure PyGTK) deletes traces of online activity, and you may be surprised how much disk space it frees up. Highlight of changes since 0.6.4: * Vacuum Google Chrome * Delete Google Chrome 3 browsing history * Add portable app for Windows * Introduce the bonus cleaners package with 9 cleaners * Update translations * Fix bugs"

Full Story (comments: none)

Languages and Tools

C

GCC Link Time Optimization branch merged

The Gnu Compiler Collection project has announced the merge of the Link Time Optimization branch. "Link Time Optimization (LTO) gives GCC the capability of dumping its internal representation (GIMPLE) to disk, so that all the different compilation units that make up a single executable can be optimized as a single module. This expands the scope of inter-procedural optimizations to encompass the whole program (or, rather, everything that is visible at link time)."

Comments (2 posted)

GCC 4.5 Status Report

The October 1, 2009 edition of the GCC 4.5 Status Report has been published. "The trunk is in Stage 3. Stage 3 will end on Nov 30th after which the trunk will be open for regression and documentation fixes only. Stage 3 is for general bugfixing, what is considered a bugfix is up to the maintainers. At the discretion of the maintainers patches that were finished during Stage 1 but have not yet been reviewed or committed may be still applied. Please have the release quality in mind when approving late patches."

Full Story (comments: none)

Caml

Caml Weekly News

The October 6, 2009 edition of the Caml Weekly News is out with new articles about the Caml language.

Full Story (comments: none)

Perl

Perl 5.11.0 now available

Version 5.11.0 of Perl has been announced. "Perl 5.11.0 is a DEVELOPMENT release. We're making it available to you today to make it easy for you to test your software on what will eventually become Perl 5.12. This release is the result of over two years of development by a global community of developers."

Full Story (comments: 5)

Python

doit 0.4.0 released

Version 0.4.0 of doit has been announced. "doit comes from the idea of bringing the power of build-tools to execute any kind of task. It will keep track of dependencies between "tasks" and execute them only when necessary. It was designed to be easy to use and "get out of your way". doit is written in Python. "tasks" can be defined in python or shell scripts. doit can be used as a build-tool or just a nice way to organize your scripts."

Full Story (comments: none)

M2Crypto 0.20.2 released

Version 0.20.2 of M2Crypto has been announced. "M2Crypto is the most complete Python wrapper for OpenSSL featuring RSA, DSA, DH, HMACs, message digests, symmetric ciphers (including AES); SSL functionality to implement clients and servers; HTTPS extensions to Python's httplib, urllib, and xmlrpclib; unforgeable HMAC'ing AuthCookies for web session management; FTP/TLS client and server; S/MIME; ZServerSSL: A HTTPS server for Zope and ZSmime: An S/MIME messenger for Zope. Smartcards supported with the Engine interface."

Full Story (comments: none)

Python 2.6.3 released

Version 2.6.3 of Python has been announced. "This is the latest production-ready version in the Python 2.6 series. Somewhere near 100 bugs have been fixed since Python 2.6.2 was released in April 2009."

Full Story (comments: 2)

stdeb 0.3.2 and 0.4.1

Versions 0.3.2 and 0.4.1 of stdeb have been announced. "stdeb produces Debian source packages from Python packages via a new distutils command, sdist_dsc. Automatic defaults are provided for the Debian package, but many aspects of the resulting package can be customized via a configuration file. An additional command, bdist_deb, creates a Debian binary package, a .deb file."

Full Story (comments: none)

Libraries

Fast decimal arithmetic module released

A set of fast decimal arithmetic modules have been released. "Libmpdec is a C (C++ ready) library for arbitrary precision decimal arithmetic. It is a complete implementation of Mike Cowlishaw's General Decimal Arithmetic specification. Fastdec.so is a Python C module with the same functionality as decimal.py. With some restrictions, code written for for decimal.py should work identically. deccheck.py performs redundant calculations using both decimal.py and fastdec.so. For each calculation the results of both modules are compared and an exception is raised if they differ."

Full Story (comments: none)

Page editor: Forrest Cook
Next page: Announcements>>


Copyright © 2009, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds