API and Library Design

Prerequisite: 201


Course Materials



irc.gimp.net #gnome-university

This course will cover how to approach the design of good APIs and shared-libraries. Students will learn the difference between an API and ABI as well as how to structure code for reusability. Lifecycle management such as symbol versioning and deprecation of symbols will also be covered.

Students will work through the following chapters and perform the exercises. Questions may be asked of the mentor as well as the community on IRC.


These need to be organized into chapters. Feel free to add topics.

  • API vs ABI
  • What is ABI stability?
  • What is API stability?
  • How do you build around stability?
  • Gracefully adding features w/o breaking ABI.
  • Concise designs (no libkitchensink)
  • Versioning libraries.
  • Supporting multiple platforms/operating systems.
  • Licensing considerations (LGPL, etc)
  • Where should headers be installed?
  • namespacing symbols to avoid collision.
  • (is libabc a good example for all of this?)

Chapter 1

Chapter 2

Chapter 3

Chapter 4

Chapter 5

Chapter 6

Chapter 7

Chapter 8

Chapter 9

Chapter 10

Outreach/GnomeUniversity/C/APIDesign (last edited 2013-12-04 18:14:58 by WilliamJonMcCann)