'\" t .\" Title: babeltrace2-intro .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 14 September 2019 .\" Manual: Babeltrace\ \&2 manual .\" Source: Babeltrace 2.0.4 .\" Language: English .\" .TH "BABELTRACE2\-INTRO" "7" "14 September 2019" "Babeltrace 2\&.0\&.4" "Babeltrace\ \&2 manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" babeltrace2-intro \- Introduction to Babeltrace 2 .SH "DESCRIPTION" .sp This manual page is an introduction to the Babeltrace\ \&2 project\&. .sp The \(lqWHAT IS BABELTRACE\ \&2?\(rq section describes the parts of the project and shows the major changes from Babeltrace\ \&1 to Babeltrace\ \&2 while the \(lqBABELTRACE\ \&2 CONCEPTS\(rq section defines the core concepts of Babeltrace\ \&2\&. .sp The \(lqTRACE PROCESSING GRAPH REPRESENTATION\(rq section shows how some concepts are visually represented in other Babeltrace\ \&2 manual pages\&. .SH "WHAT IS BABELTRACE\ \&2?" .sp Babeltrace\ \&2 is an open\-source software project of which the purpose is to process or convert traces (see )\&. .sp The Babeltrace\ \&2 project includes the following parts: .PP Babeltrace\ \&2 library (libbabeltrace2) .RS 4 A shared library with a C API\&. .sp With libbabeltrace2, you can programmatically create plugins and component classes, build and run trace processing graphs, and more (see the \(lqBABELTRACE\ \&2 CONCEPTS\(rq section for more details about those concepts)\&. .sp All the other Babeltrace\ \&2 parts rely on this library\&. .RE .PP \fBbabeltrace2\fR command\-line program .RS 4 A command\-line interface which uses libbabeltrace2 to load plugins, create a trace processing graph, create components, connect their ports correctly, and run the graph\&. .sp You can also use \fBbabeltrace2\fR to list the available plugins or to query an object from a component class\&. .sp See \fBbabeltrace2\fR(1)\&. .RE .PP Babeltrace\ \&2 Python bindings .RS 4 A Python\ \&3 package (\fBbt2\fR) which offers a Pythonic interface of libbabeltrace2\&. .sp You can perform the same operations which are available in libbabeltrace2 with the Python bindings, but more conveniently and with less code\&. However, the Python bindings are less performant than libbabeltrace2\&. .RE .PP Babeltrace\ \&2 project\(cqs plugins .RS 4 The Babeltrace\ \&2 plugins shipped with the project\&. .sp Those plugins are not special in that they only rely on libbabeltrace2 and you don\(cqt need them to use libbabeltrace2, \fBbabeltrace2\fR(1), or the Python bindings\&. However, the project\(cqs plugins provide many widely used trace format encoders/decoders as well as common trace processing graph utilities\&. .sp The Babeltrace\ \&2 project\(cqs plugins are: .PP \fBctf\fR .RS 4 Common Trace Format (see ) (CTF) input/output, including the LTTng live source\&. .sp See \fBbabeltrace2-plugin-ctf\fR(7)\&. .RE .PP \fBlttng-utils\fR .RS 4 Graph utilities specific to LTTng (see ) traces\&. .sp See \fBbabeltrace2-plugin-lttng-utils\fR(7)\&. .RE .PP \fBtext\fR .RS 4 Plain text input/output\&. .sp See \fBbabeltrace2-plugin-text\fR(7)\&. .RE .PP \fButils\fR .RS 4 Common graph utilities (muxer, trimmer, counter, dummy sink)\&. .sp See \fBbabeltrace2-plugin-utils\fR(7)\&. .RE .RE .SS "Changes since Babeltrace\ \&1" .sp This manual page is an introduction to Babeltrace\ \&2, a rewrite of Babeltrace\ \&1 with a focus on extensibility, flexibility, and interoperability\&. .sp Babeltrace\ \&1 exists since 2010\&. .sp You can install both projects on the same file system as there are no file name conflicts\&. .sp The major improvements brought by Babeltrace\ \&2 are: .PP General .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Full plugin support: any user can distribute a Babeltrace\ \&2 plugin and, as long as libbabeltrace2 finds it, any application linked to libbabeltrace2 can load it and use it\&. .sp Plugins are not just trace format encoders and decoders: they package source, filter, and sink component classes so that you can connect specialized, reusable components together in a trace processing graph to create a customized trace conversion or analysis device\&. .sp This modular strategy is much like how the FFmpeg (see ), GStreamer (see ), and DirectShow (see ) projects approach media stream processing\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} All the parts of the Babeltrace\ \&2 project run on the major operating systems, including Windows and macOS\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Some component classes, such as \fBsink.text.pretty\fR (similar to the \fBtext\fR output format of \fBbabeltrace\fR(1)) and \fBsink.text.details\fR, can write color codes to the standard output when it\(cqs connected to a color\-enabled terminal\&. .sp The Babeltrace\ \&2 log, printed to the standard output, can also be colorized\&. .RE .RE .PP Command\-line interface .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Whereas you can convert traces from one format to another with Babeltrace\ \&1\(cqs CLI tool, \fBbabeltrace\fR(1), you can also execute a custom trace manipulation task with \fBbabeltrace2\fR(1) thanks to the \fBbabeltrace2-run\fR(1) command\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \fBbabeltrace2-convert\fR(1) command features an automatic source component discovery algorithm to find the best suited components to create for a given non\-option argument (file or directory path, or custom string like an LTTng live (see ) URL)\&. .sp For example: .sp .if n \{\ .RS 4 .\} .nf $ babeltrace2 /path/to/ctf/trace .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf $ babeltrace2 net://localhost/host/myhost/my\-session .fi .if n \{\ .RE .\} .RE .RE .PP CTF (see ) input/output .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \fBsource.ctf.fs\fR component class, which is more or less the equivalent of Babeltrace\ \&1\(cqs \fBctf\fR input format, has features not found in Babeltrace\ \&1: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The component handles many trace quirks which are the results of known tracer bugs and corner cases (LTTng\-UST, LTTng\-modules, and barectf (see )), making it possible to decode malformed packets\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The component merges CTF traces sharing the same UUID into a single, logical trace\&. .sp This feature supports LTTng\ \&2\&.11\(cqs tracing session rotation trace chunks\&. .RE .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} With a \fBsink.ctf.fs\fR component, you can create CTF traces on the file system\&. .sp With \fBbabeltrace2\fR(1), you can use the \fB--output-format=ctf\fR and \fB--output\fR options to create an implicit \fBsink.ctf.fs\fR component\&. .sp For example: .sp .if n \{\ .RS 4 .\} .nf $ babeltrace2 /path/to/input/trace \e \-\-output\-format=ctf \-\-output=trace\-dir .fi .if n \{\ .RE .\} .RE .RE .PP LTTng live (see ) input .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \fBbabeltrace\fR(1) command exits successfully when it cannot find an LTTng live (\fB--input-format=lttng-live\fR option) tracing session\&. .sp The \fBsession-not-found-action\fR initialization parameter controls what a \fBsource.ctf.lttng-live\fR message iterator does when it cannot find the remote tracing session\&. .sp If the action is \fBend\fR, the message iterator does like \fBbabeltrace\fR(1) and simply ends successfully\&. .sp If the action is \fBcontinue\fR (the default), the message iterator never ends: it keeps on trying until the tracing session exists, indeed subscribing to the session\&. .RE .RE .PP Library .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} libbabeltrace2 shares nothing with libbabeltrace\&. .sp The Babeltrace\ \&2 library C API has features such as: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} A single header file\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Function precondition and postcondition checking\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Object\-oriented model with shared and unique objects\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Strict C typing and \fBconst\fR correctness\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} User\-extensible classes\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Rich, thread\-safe error reporting\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Per\-component and per\-subsystem logging levels\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Trace intermediate representation (IR) objects to make the API trace\-format\-agnostic\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} A versioned protocol for message interchange between components to enable forward and backward compatibility\&. .RE .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} You can build the library in developer mode to enable an extensive set of function precondition and postcondition checks\&. .sp The developer mode can help detect programming errors early when you develop a Babeltrace\ \&2 plugin or an application using libbabeltrace2\&. .sp See the project\(cqs \fBREADME\fR for build\-time requirements and detailed build instructions\&. .RE .RE .SH "BABELTRACE\ \&2 CONCEPTS" .sp This section defines the main concepts of the Babeltrace\ \&2 project\&. .sp These concepts translate into types and functions in libbabeltrace2 and its Python bindings, but also as command\-line actions and options in the \fBbabeltrace2\fR program\&. The other Babeltrace\ \&2 manual pages assume that you are familiar with the following definitions\&. .sp Some Babeltrace\ \&2 concepts are interdependent: it is normal to jump from one definition to another to understand the big picture\&. .PP Component class .RS 4 A reusable class which you can instantiate as one or more components within a trace processing graph\&. .sp There are three types of component classes used to create the three types of components: source, filter, and sink\&. .sp A component class implements methods, one of which is an initialization method, or constructor, to create a component\&. You pass \fIinitialization parameters\fR to this method to customize the created component\&. For example, the initialization method of the \fBsource.ctf.fs\fR component class accepts a mandatory \fBinputs\fR parameter which is an array of file system path(s) to the CTF trace(s)\&. It also accepts an optional \fBclock-class-offset-ns\fR parameter which is an offset, in nanoseconds, to add to all the clock classes (descriptors of stream clocks) found in the traces\(cqs metadata\&. .sp A component class can have a description and a help text\&. .RE .PP Component .RS 4 A node within a trace processing graph\&. .sp There are three types of components: .PP Source component .RS 4 An input component which produces messages\&. .sp Examples: CTF files input, log file input, LTTng live input, random event generator\&. .RE .PP Filter component .RS 4 An intermediate component which can transform the messages it consumes, augment them, sort them, discard them, or create new ones\&. .sp Examples: filter which removes messages based on an expression, filter which adds debugging information to selected events, message muxer, trace trimmer\&. .RE .PP Sink component .RS 4 An output component which consumes messages and usually writes them to one or more formatted files\&. .sp Examples: log file output, CTF files output, pretty\-printed plain text output\&. .RE .sp Components are connected together within a trace processing graph through their ports\&. Source components have output ports, sink components have input ports, and filter components have both\&. .sp A component is the instance of a component class\&. The terms \fIcomponent\fR and \fIcomponent class instance\fR are equivalent\&. .sp Within a trace processing graph, each component has a unique name\&. This is not the name of its component class, but an instance name\&. If \fBhuman\fR is a component class name, than \fBNancy\fR and \fBJohn\fR could be component names\&. .sp Once a graph is configured (the first time it runs), you cannot add components to it for the remaining graph\(cqs lifetime\&. .RE .PP Port .RS 4 A connection point, on a component, from which are sent or where are received messages when the trace processing graph runs\&. .sp An output port is from where messages are sent\&. An input port is where messages are received\&. Source components have output ports, sink components have input ports, and filter components have both\&. .sp You can only connect an output port to a single input port\&. .sp All ports do not need to be connected\&. .sp A filter or sink component receiving messages from its input ports is said to \fIconsume\fR messages\&. .sp The link between an output port and input port is a connection\&. .sp Once a graph is configured (the first time it runs), you cannot connect ports for the remaining graph\(cqs lifetime\&. .RE .PP Connection .RS 4 The link between an output port and an input port through which messages flow when a trace processing graph runs\&. .RE .PP Message iterator .RS 4 An iterator on an input port of which the returned elements are messages\&. .sp A component or another message iterator can create many message iterators on a single input port, before or while the trace processing graph runs\&. .RE .PP Message .RS 4 The element of a message iterator\&. .sp Messages flow from output ports to input ports\&. .sp A source component message iterator produces messages, while a sink component consumes them\&. A filter component message iterator can both consume and produce messages\&. .sp The main types of messages are: .PP Event .RS 4 A trace event record within a packet or within a stream\&. .RE .PP Packet beginning .RS 4 The beginning of a packet within a stream\&. .sp A packet is a conceptual container of events\&. .RE .PP Packet end .RS 4 The end of a packet within a stream\&. .RE .PP Stream beginning .RS 4 The beginning of a stream\&. .sp A stream is a conceptual container of packets and/or events\&. .sp Usually, a given source component\(cqs output port sends packet and event messages which belong to a single stream, but it\(cqs not required\&. .RE .PP Stream end .RS 4 The end of a stream\&. .RE .PP Discarded events .RS 4 A count of discarded events within a given time interval for a given stream\&. .RE .PP Discarded packets .RS 4 A count of discarded packets within a given time interval for a given stream\&. .RE .RE .PP Trace processing graph .RS 4 A filter graph (see ) where nodes are components and messages flow from output ports to input ports\&. .sp You can build a trace processing graph with libbabeltrace2, with the Babeltrace\ \&2 Python bindings, or with the \fBbabeltrace2-run\fR(1) and \fBbabeltrace2-convert\fR(1) CLI commands\&. .sp When a trace processing graph \fIruns\fR, the sink components consume messages from their input ports, making all the graph\(cqs message iterators work one message at a time to perform the trace conversion or analysis duty\&. .RE .PP Plugin .RS 4 A container, or package, of component classes as a shared library or Python module\&. .sp Each component class within a plugin has a type (source, filter, or sink) and a name\&. The type and name pair is unique within a given plugin\&. .sp libbabeltrace2 can load a plugin (\fB.so\fR, \fB.dll\fR, or \fB.py\fR file) at run time: the result is a plugin object in which you can find a specific component class and instantiate it within a trace processing graph as a component\&. .sp The \fBbabeltrace2\fR program uses the \fICOMP\-CLS\-TYPE\&.PLUGIN\-NAME\&.COMP\-CLS\-NAME\fR format to identify a specific component class within a specific plugin\&. \fICOMP\-CLS\-TYPE\fR is either \fBsource\fR (or \fBsrc\fR), \fBfilter\fR (or \fBflt\fR), or \fBsink\fR\&. .sp You can list the available Babeltrace\ \&2 plugins with the \fBbabeltrace2-list-plugins\fR(1) command\&. .RE .PP Query .RS 4 An operation with which you can get a named object from a component class, possibly with custom query parameters\&. .sp The plain text metadata stream of a CTF trace and the available LTTng live sessions of a given LTTng relay daemon are examples of query objects\&. .sp You can use libbabeltrace2, the Babeltrace\ \&2 Python bindings, or the \fBbabeltrace2-query\fR(1) CLI command to query a component class\(cqs object\&. .RE .SH "TRACE PROCESSING GRAPH REPRESENTATION" .sp In the Babeltrace\ \&2 manual pages, a component is represented with a box\&. The box has the component class type, plugin name, and component class name at the top\&. Just below, between square brackets, is its component name within the trace processing graph\&. Each port is represented with an \fB@\fR symbol on the border(s) of the component box with its name inside the box\&. Output ports are on the box\(cqs right border while input ports are on the box\(cqs left border\&. .sp For example, here\(cqs a source component box: .sp .if n \{\ .RS 4 .\} .nf +\-\-\-\-\-\-\-\-\-\-\-\-+ | src\&.ctf\&.fs | | [my\-src] | | | | stream0 @ | stream1 @ | stream2 @ +\-\-\-\-\-\-\-\-\-\-\-\-+ .fi .if n \{\ .RE .\} .sp This one is an instance of the \fBsource.ctf.fs\fR component class named \fBmy-src\fR\&. It has three output ports named \fBstream0\fR, \fBstream1\fR, and \fBstream2\fR\&. .sp A trace processing graph is represented with multiple component boxes connected together\&. The connections are arrows from output ports to input ports\&. .sp For example, here\(cqs a simple conversion graph: .sp .if n \{\ .RS 4 .\} .nf +\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ | src\&.ctf\&.fs | | flt\&.utils\&.muxer | | sink\&.text\&.pretty | | [ctf] | | [muxer] | | [text] | | | | | | | | stream0 @\-\-\->@ in0 out @\-\-\->@ in | | stream1 @\-\-\->@ in1 | +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ | stream2 @\-\-\->@ in2 | +\-\-\-\-\-\-\-\-\-\-\-\-+ @ in3 | +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ .fi .if n \{\ .RE .\} .sp Note that input port \fBin3\fR of component \fBmuxer\fR is not connected in this example\&. .sp Sometimes, we symbolically represent other resources which are consumed from or produced by components\&. In this case, arrows are used, but they do not go to or from port symbols (\fB@\fR), except for messages\&. For example, in the graph above, the \fBctf\fR source component consumes a CTF trace and the \fBtext\fR sink component prints plain text to the terminal, so here\(cqs a more complete diagram: .sp .if n \{\ .RS 4 .\} .nf CTF trace | | +\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ | | src\&.ctf\&.fs | | flt\&.utils\&.muxer | | sink\&.text\&.pretty | \*(Aq\-\->| [ctf] | | [muxer] | | [text] | | | | | | | | stream0 @\-\-\->@ in0 out @\-\-\->@ in | | stream1 @\-\-\->@ in1 | +\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-+ | stream2 @\-\-\->@ in2 | | +\-\-\-\-\-\-\-\-\-\-\-\-+ @ in3 | \*(Aq\-\-> Terminal +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ .fi .if n \{\ .RE .\} .sp Here\(cqs another example of a more complex graph which splits a specific stream using some criteria: .sp .if n \{\ .RS 4 .\} .nf +\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ | src\&.ctf\&.fs | | flt\&.utils\&.muxer | | sink\&.text\&.pretty | | [ctf\-in] | | [muxer] | | [text] | | | | | | | | stream0 @\-\-\->@ in0 out @\-\-\->@ in | | stream1 @\-\-\->@ in1 | +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ | stream2 @\-\&. @ in2 | +\-\-\-\-\-\-\-\-\-\-\-\-+ | +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +\-\-\-\-\-\-\-\-\-\-\-\-\-+ | | sink\&.ctf\&.fs | | | [ctf\-out0] | | +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ | | | | flt\&.some\&.splitter | \&.\->@ in | | | [splitter] | | +\-\-\-\-\-\-\-\-\-\-\-\-\-+ | | | | \*(Aq\->@ in A @\-\*(Aq +\-\-\-\-\-\-\-\-\-\-\-\-\-+ | B @\-\&. | sink\&.ctf\&.fs | +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ | | [ctf\-out1] | | | | \*(Aq\->@ in | +\-\-\-\-\-\-\-\-\-\-\-\-\-+ .fi .if n \{\ .RE .\} .SH "BUGS" .sp If you encounter any issue or usability problem, please report it on the Babeltrace bug tracker (see )\&. .SH "RESOURCES" .sp The Babeltrace project shares some communication channels with the LTTng project (see )\&. .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Babeltrace website (see ) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Mailing list (see ) for support and development: \fBlttng-dev@lists.lttng.org\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} IRC channel (see ): \fB#lttng\fR on \fBirc.oftc.net\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Bug tracker (see ) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Git repository (see ) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} GitHub project (see ) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Continuous integration (see ) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Code review (see ) .RE .SH "AUTHORS" .sp The Babeltrace\ \&2 project is the result of hard work by many regular developers and occasional contributors\&. .sp The current project maintainer is J\('er\('emie Galarneau \&. .SH "COPYRIGHT" .sp This manual page is part of the Babeltrace\ \&2 project\&. .sp Babeltrace is distributed under the MIT license (see )\&. .SH "SEE ALSO" .sp \fBbabeltrace2\fR(1)