wiki:Year1Deliverable

Overview

BIND 10 will be making its first release on 2010-03-19. This is the "Year 1 Deliverable" of the FiveYearPlan. By agreement with the sponsors for the first year work, this is an authoritative-only server, as well as the BIND 10 framework needed to support future BIND 10 work.

This code is not intended for general use, and is known to be inefficient, difficult to work with, and riddled with bugs. These problems will all be fixed over the next couple of years, as functionality is added and refined, and the software matures. However, the codebase has a good framework for moving forward, and the software is capable of serving as a DNS server with significant functionality.

The code will be released as a tarball. As always, the Subversion repository is open and contains the latest development code if something people want something even more fresh.

Services

The BIND 10 Y1 server includes:

  • Authoritative DNS server answering queries, supporting:
    • RFCs: 1034, 1035 (basic DNS)
    • RFC: 2672 (DNAME)
    • RFCs: 3225 (DO bit), 3658 (DS), 4033, 4034, 4035 (DNSKEY, RRSIG, NSEC)
    • RFC: 5155 (NSEC3)
    • IPv4 and IPv6
    • UDP and TCP
  • Command-line configuration & control
  • SQLite3 as the data source
  • Zone file loader (SQLite3-specific)

Libraries

We also have a number of libraries, all used by BIND 10 itself, but not limited to that role:

  • DNS library, supporting a basic level of DNS-related concepts:
    • domain names
    • RR-related parameters: types, classes, TTLs
    • RRsets
    • RDATA for some major RR types:
      A
      AAAA
      CNAME
      DNAME
      DNSKEY
      DS
      MX
      NS
      NSEC
      NSEC3
      NSEC3PARAM
      OPT
      PTR
      RRSIG
      SOA
      TXT
      
    • Unknown RR types are supported based on RFC3597
    • DNS messages (standard query/response)
    • APIs to convert these objects to/from text or to/from wire format
    • EDNS0
    • C++ bindings
    • Python bindings
  • API for communicating with other BIND 10 components (the "c-channel")
    • C++ bindings
    • Python bindings
  • API for using the BIND 10 configuration system
    • C++ bindings
    • Python bindings
  • API for using the BIND 10 data source (read-only)
    • C++ bindings
  • REST-ful interface for command & control of BIND 10

Architectural Bits

There are also a number of non-visible architectural features, which hold the system together:

  • Inter-component RPC (msgq)
  • Dynamic and persistent configuration
  • Automatic restart from single-component errors (boss)
  • Simple authentication process for server control (cmdctl)