using lGPL v3 because it's less wordy and easier to read