HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
oracle
libdtrace-ctf
C2019–2019
oracle / libdtrace-ctf

libdtrace-ctf

libdtrace-ctf is the Compact Type Format library used by DTrace on Linux

3Distinct people
3Mentions
0Explicit recommenders
49GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

libdtrace-ctf is the Compact Type Format library used by DTrace on Linux

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 1:49:46 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by week3 dated mentions

Observed mentions: 2019-03-12 00:17:15 UTC to 2019-07-24 22:58:48 UTC. Weeks start Monday, UTC.

0122019-03-11 00:00:00 UTC to 2019-03-18 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 commentsMar 112019-03-18 00:00:00 UTC to 2019-03-25 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-03-25 00:00:00 UTC to 2019-04-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-04-01 00:00:00 UTC to 2019-04-08 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-04-08 00:00:00 UTC to 2019-04-15 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-04-15 00:00:00 UTC to 2019-04-22 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-04-22 00:00:00 UTC to 2019-04-29 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-04-29 00:00:00 UTC to 2019-05-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-05-06 00:00:00 UTC to 2019-05-13 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-05-13 00:00:00 UTC to 2019-05-20 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsMay 132019-05-20 00:00:00 UTC to 2019-05-27 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-05-27 00:00:00 UTC to 2019-06-03 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-06-03 00:00:00 UTC to 2019-06-10 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-06-10 00:00:00 UTC to 2019-06-17 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-06-17 00:00:00 UTC to 2019-06-24 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-06-24 00:00:00 UTC to 2019-07-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-07-01 00:00:00 UTC to 2019-07-08 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-07-08 00:00:00 UTC to 2019-07-15 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-07-15 00:00:00 UTC to 2019-07-22 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-07-22 00:00:00 UTC to 2019-07-29 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsJul 22

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Mar 112019-03-11 00:00:00 UTC2019-03-18 00:00:00 UTC202
Mar 182019-03-18 00:00:00 UTC2019-03-25 00:00:00 UTC000
Mar 252019-03-25 00:00:00 UTC2019-04-01 00:00:00 UTC000
Apr 12019-04-01 00:00:00 UTC2019-04-08 00:00:00 UTC000
Apr 82019-04-08 00:00:00 UTC2019-04-15 00:00:00 UTC000
Apr 152019-04-15 00:00:00 UTC2019-04-22 00:00:00 UTC000
Apr 222019-04-22 00:00:00 UTC2019-04-29 00:00:00 UTC000
Apr 292019-04-29 00:00:00 UTC2019-05-06 00:00:00 UTC000
May 62019-05-06 00:00:00 UTC2019-05-13 00:00:00 UTC000
May 132019-05-13 00:00:00 UTC2019-05-20 00:00:00 UTC000
May 202019-05-20 00:00:00 UTC2019-05-27 00:00:00 UTC000
May 272019-05-27 00:00:00 UTC2019-06-03 00:00:00 UTC000
Jun 32019-06-03 00:00:00 UTC2019-06-10 00:00:00 UTC000
Jun 102019-06-10 00:00:00 UTC2019-06-17 00:00:00 UTC000
Jun 172019-06-17 00:00:00 UTC2019-06-24 00:00:00 UTC000
Jun 242019-06-24 00:00:00 UTC2019-07-01 00:00:00 UTC000
Jul 12019-07-01 00:00:00 UTC2019-07-08 00:00:00 UTC000
Jul 82019-07-08 00:00:00 UTC2019-07-15 00:00:00 UTC000
Jul 152019-07-15 00:00:00 UTC2019-07-22 00:00:00 UTC000
Jul 222019-07-22 00:00:00 UTC2019-07-29 00:00:00 UTC101

What Hacker News says

3 sources
From what I know about it, gobject-introspection has some nice properties, but one killer drawback: it's incompatible with cross compilation. This is apparently because it requires running binaries compiled for the target system as part of the build process. You actually can cross compile if you have an emulator for that system handy [1], but that's horrible. Apparently the reason it requires running the compiled binaries is that GObject types are only registered at runtime, within so-called "_get_type" functions. For more typical systems, everything needed can be determined at compile time. Too bad there's no portable way to ask a C compiler to dump what it knows about a source file, but if you just want things like struct sizes and field offsets, you can compile a C file that embeds them as global variables, and then extract the var
Read the rest
iable values. For more advanced introspection there are many less-portable options including Clang's API, GCC-XML, parsing debug info, or writing your own compiler (easier for C; it seems that parts of gobject-introspection work like this). Anyway, another interesting comparison is DTrace's CTF (Compact Type Format) [2], a simple binary format that describes the kernel's C struct layouts, function signatures, etc. This information is simply converted from compiler-generated debug info [3], but it's stripped down enough that it can be embedded into every kernel without too much size overhead. When the DTrace compiler is invoked to compile a user hook, it parses the CTF data and exposes the types and functions to the user's code (which is written in a custom C-like language). Ironically, BPF has BTF, which is a very similar-looking format that encodes very similar kinds of data – but is used for a completely different purpose. Specifically, it's only used to encode types and functions defined by BPF programs, to allow the kernel to pretty-print things. But in theory BTF could be repurposed to work like CTF: you would need to generate BTF information for the kernel itself, and then Clang could be extended to support "including" BTF files in place of C headers. However, this option was apparently discussed and rejected [4]. I haven't read the original threads to find out why, but I suspect it might involve: - Lack of existing tooling to do the above; - Lower expressivity compared to C headers, e.g. the inability to encode macros (although this could be fixed); - Desire to use the information for building not just BPF hooks but also full-fledged kernel modules. [1] https://maxice8.github.io/8-cross-the-gir/ [2] https://github.com/oracle/libdtrace-ctf/blob/master/include/... [3] https://www.freebsd.org/cgi/man.cgi?query=ctfconvert&sektion... [4] https://lwn.net/Articles/783832/
In Extending the Linux Kernel with Built-In Kernel Headers
DTrace for Linux CTF hacker here. The BPF people cannot be blamed for not using CTF. Even if it had been relicensed to the GPLv2 way back in 2005, until recently (https://github.com/oracle/libdtrace-ctf release 1.0 or 1.1) it was impractical to use CTF on larger projects because the file format could only encode a strictly limited number of types (2^15 in each of a parent and child container): it had a lot of related limitations as well, but that was the big one. This is not enough for a largeish enterprise kernel, even assuming that you share types used by multiple modules to reduce the overall type count. Also, BTF and CTF serve rather different purposes: CTF specifically encodes knowledge about C types, while BTF is specialized for encoding information about BPF maps. You can't use CTF for that: C doesn't even have a map type, nor anyt
Read the rest
hing like one, and the bits CTF spends on things like the details of floating-point formats are wasted on BPF. As for the other part... obviously, as someone working on DTrace and using it ever more, I think it does hold value in its own right. It operates at a different level of the stack from BPF, in any case: it's a user-facing tool like a kernel-level awk, which is nothing like BPF. In my opinion, saying that DTrace doesn't hold value because of BPF is like saying that C doesn't hold value because ARM assembly language exists as well as x86 (in this metaphor, C == DTrace, ARM assembly language == BPF, x86 assembly language == DIF, the DTrace intermediate format). It certainly seems possible to replace the DIF portion of DTrace with BPF, but this will not obsolete BPF nor DTrace: instead, DTrace will drop DIF and the DIF interpreter and build on BPF, generating BPF instruction streams the way it now generates DIF instruction streams. We get to improve BPF if needed and drop a redundant interpreter and BPF tracing gets a hopefully-nicer user interface in the shape of DTrace, and wider usage. Win-win! (I'm not doing most of the work on this, so my opinion is far from authoritative, but I did do a preliminary experimental conversion of the hand-rolled DTrace code generator to emit BPF instructions instead, and it seemed perfectly practical: the two encodings are remarkably similar, and BPF is pleasant to generate, as such things go. That's only a small part of what needs doing, of course...)
In DTrace on Windows
Hi, Yes, it's GPL (and we got rid of the separate kernel module). The utils portion is UPL. It's available with new kernels (including 5.0) on github as well. https://github.com/oracle/dtrace-utils https://github.com/oracle/libdtrace-ctf https://github.com/ezannoni/dtrace-linux-kernel We are working on a Fedora version of the kernel patches. We are also discussing with the BPF team (on netdev) how to provide DTrace functionality integrated with the Linux Kernel.
In DTrace on Windows

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.