This article will address the topic of JACK Audio Connection Kit, which has gained great relevance in recent years due to its impact on various areas of society. Throughout history, JACK Audio Connection Kit has been the subject of numerous studies and debates, generating increasing interest from academics, experts and the general public. This article seeks to analyze in depth the most relevant aspects of JACK Audio Connection Kit, exploring its multiple dimensions and its influence in different contexts. Likewise, the most recent research related to JACK Audio Connection Kit will be examined, in order to provide a complete and updated view on the topic. Through a critical and reflective approach, it is intended to offer the reader an enriching perspective that contributes to a greater understanding of JACK Audio Connection Kit and its implications in contemporary society.
![]() | |||||
Original author(s) | Paul Davis, Stéphane Letz | ||||
---|---|---|---|---|---|
Developer(s) | JACK team | ||||
Initial release | 2002 | ||||
Stable release |
| ||||
Repository | github | ||||
Written in | C,[1] C++ | ||||
Operating system | BSD, Linux, macOS, Solaris, Windows, iOS | ||||
Type | Sound server | ||||
License | Server: GPL-2.0-or-later Library: LGPL-2.1-or-later[2] | ||||
Website | jackaudio |
JACK Audio Connection Kit (or JACK; a recursive acronym) is a professional sound server API and pair of daemon implementations to provide real-time, low-latency connections for both audio and MIDI data between applications. JACK was developed by a community of open-source developers led by Paul Davis (who won an Open Source Award in 2004 for this work)[3] and has been a key piece of infrastructure and the de facto standard for professional audio software on Linux since its inception in 2002. The server is free software, licensed under GPL-2.0-or-later, while the library is licensed under LGPL-2.1-or-later.[2]
The JACK API is standardized by consensus, and two compatible implementations exist: jack1, which is implemented in plain C and has been in maintenance mode for a while, and jack2 (originally jackdmp), a re-implementation in C++ originally led by Stéphane Letz, which introduced multi-processor scalability and support for operating systems other than Linux.[4]
JACK can be used with ALSA, PortAudio, CoreAudio, FFADO and OSS as hardware back-ends. Additionally, a dummy driver (useful if no sound output is desired, e.g. for offline rendering) and an Audio-over-UDP driver exist. One or both implementations can run on Linux, macOS, Solaris, Windows, iOS, FreeBSD, OpenBSD and NetBSD.
The JACK API is also implemented by PipeWire for backwards compatibility as a complete drop-in replacement provider for JACK clients, mapping JACK API calls to equivalent PipeWire calls.[5] If used as a replacement for ALSA and PulseAudio as well, it can unify the different sound servers and APIs that might be typically found on a machine, and allow better integration between different software. PipeWire also claims to add a number of features and fix a number of limitations compared to JACK.[6] The use of PipeWire as the default implementation of JACK is the default on Fedora 34 and newer.[7]
The scheduling requirements of JACK to achieve sufficiently low latencies were one of the driving forces behind the real-time optimization effort for the Linux kernel 2.6 series,[8][9] whose initial latency performance had been disappointing compared to the older 2.4 series.[10] Real-time tuning work culminated in numerous scheduling improvements to the mainline kernel and the creation of an -rt branch for more intrusive optimizations in the release 2.6.24, and later the CONFIG_PREEMPT_RT patch.[11]