Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Licensing Problem #271

Open
9 tasks
EL-File4138 opened this issue Jan 4, 2025 · 9 comments
Open
9 tasks

Licensing Problem #271

EL-File4138 opened this issue Jan 4, 2025 · 9 comments

Comments

@EL-File4138
Copy link
Contributor

EL-File4138 commented Jan 4, 2025

TODO:

  • Replace infectious GPL file (or remove depends on whether it's still used)
  • Fix incorrect file licensing
  • Supplement per file licensing directive: SPDX-Identifier?
  • Checking out-of-source clain and fix incorrect licensing practice
    • Windows and macOS binary release
    • Website and document
  • LICENCE file:
    • Filename Typo fix
    • Supplement fixed status

Current status:

  • Declared in Meson Builds (Currently acknowledged project-wide license): BSD-3-Clause
  • LICENCE file: BSD-3-Clause for the project, and indicates:
    • src/gl/: "MIT license. See src/gl/glext.h"
    • src/MatroskaParser.(c|h): "Licensed to BSDL with permission from the author."
    • universalchardet/: "MPL 1.1", in subproject
  • Auto scanned:
GNU General Public License
--------------------------
# Copied/Modified from Inkscape project, when it was in GPL-1.0
# Infectious
packages/osx_dmg/dmg_set_style.applescript
tools/osx-dmg.sh

GNU General Public License v2.0 or later [obsolete FSF postal address (Mass Ave)]
---------------------------------------------------------------------------------
# Copied from AviSynth, GPL-2.0 project but grants exemption from GPL license
src/avisynth.h

MIT License
-----------
automation/autoload/cleantags-autoload.lua
automation/include/cleantags.lua

ISC License
-----------
automation/autoload/select-overlaps.moon
automation/autoload/strip-tags.lua
automation/include/aegisub/argcheck.moon
automation/include/aegisub/clipboard.lua
automation/include/aegisub/ffi.moon
automation/include/aegisub/lfs.moon
automation/include/aegisub/re.moon
automation/include/aegisub/util.moon
automation/include/clipboard.lua
automation/include/re.lua
automation/include/unicode.lua
automation/tests/aegisub.cpp
automation/tests/modules/argcheck.moon
automation/tests/modules/lfs.moon
automation/tests/modules/re.moon
automation/tests/modules/unicode.moon
libaegisub/ass/dialogue_parser.cpp
libaegisub/ass/karaoke.cpp
libaegisub/ass/time.cpp
libaegisub/ass/uuencode.cpp
libaegisub/audio/provider.cpp
libaegisub/audio/provider_convert.cpp
libaegisub/audio/provider_dummy.cpp
libaegisub/audio/provider_hd.cpp
libaegisub/audio/provider_lock.cpp
libaegisub/audio/provider_pcm.cpp
libaegisub/audio/provider_ram.cpp
libaegisub/common/cajun/writer.cpp
libaegisub/common/calltip_provider.cpp
libaegisub/common/character_count.cpp
libaegisub/common/charset.cpp
libaegisub/common/charset_6937.cpp
libaegisub/common/charset_6937.h
libaegisub/common/charset_conv.cpp
libaegisub/common/color.cpp
libaegisub/common/dispatch.cpp
libaegisub/common/file_mapping.cpp
libaegisub/common/format.cpp
libaegisub/common/fs.cpp
libaegisub/common/hotkey.cpp
libaegisub/common/io.cpp
libaegisub/common/json.cpp
libaegisub/common/kana_table.cpp
libaegisub/common/karaoke_matcher.cpp
libaegisub/common/keyframe.cpp
libaegisub/common/line_iterator.cpp
libaegisub/common/log.cpp
libaegisub/common/mru.cpp
libaegisub/common/option.cpp
libaegisub/common/option_value.cpp
libaegisub/common/parser.cpp
libaegisub/common/parser.h
libaegisub/common/path.cpp
libaegisub/common/thesaurus.cpp
libaegisub/common/unicode.cpp
libaegisub/common/util.cpp
libaegisub/common/vfr.cpp
libaegisub/common/ycbcr_conv.cpp
libaegisub/include/libaegisub/access.h
libaegisub/include/libaegisub/address_of_adaptor.h
libaegisub/include/libaegisub/ass/dialogue_parser.h
libaegisub/include/libaegisub/ass/karaoke.h
libaegisub/include/libaegisub/ass/smpte.h
libaegisub/include/libaegisub/ass/time.h
libaegisub/include/libaegisub/ass/uuencode.h
libaegisub/include/libaegisub/audio/provider.h
libaegisub/include/libaegisub/background_runner.h
libaegisub/include/libaegisub/cajun/writer.h
libaegisub/include/libaegisub/calltip_provider.h
libaegisub/include/libaegisub/character_count.h
libaegisub/include/libaegisub/charset.h
libaegisub/include/libaegisub/charset_conv.h
libaegisub/include/libaegisub/charset_conv_win.h
libaegisub/include/libaegisub/color.h
libaegisub/include/libaegisub/dispatch.h
libaegisub/include/libaegisub/file_mapping.h
libaegisub/include/libaegisub/format.h
libaegisub/include/libaegisub/format_flyweight.h
libaegisub/include/libaegisub/format_path.h
libaegisub/include/libaegisub/fs.h
libaegisub/include/libaegisub/hotkey.h
libaegisub/include/libaegisub/io.h
libaegisub/include/libaegisub/json.h
libaegisub/include/libaegisub/kana_table.h
libaegisub/include/libaegisub/karaoke_matcher.h
libaegisub/include/libaegisub/keyframe.h
libaegisub/include/libaegisub/line_iterator.h
libaegisub/include/libaegisub/line_wrap.h
libaegisub/include/libaegisub/log.h
libaegisub/include/libaegisub/lua/ffi.h
libaegisub/include/libaegisub/lua/modules.h
libaegisub/include/libaegisub/lua/script_reader.h
libaegisub/include/libaegisub/lua/utils.h
libaegisub/include/libaegisub/mru.h
libaegisub/include/libaegisub/of_type_adaptor.h
libaegisub/include/libaegisub/option.h
libaegisub/include/libaegisub/option_value.h
libaegisub/include/libaegisub/owning_intrusive_list.h
libaegisub/include/libaegisub/path.h
libaegisub/include/libaegisub/scoped_ptr.h
libaegisub/include/libaegisub/signal.h
libaegisub/include/libaegisub/spellchecker.h
libaegisub/include/libaegisub/split.h
libaegisub/include/libaegisub/string.h
libaegisub/include/libaegisub/thesaurus.h
libaegisub/include/libaegisub/type_name.h
libaegisub/include/libaegisub/unicode.h
libaegisub/include/libaegisub/util.h
libaegisub/include/libaegisub/util_osx.h
libaegisub/include/libaegisub/vfr.h
libaegisub/include/libaegisub/ycbcr_conv.h
libaegisub/lua/modules.cpp
libaegisub/lua/modules/lfs.cpp
libaegisub/lua/modules/re.cpp
libaegisub/lua/modules/unicode.cpp
libaegisub/lua/script_reader.cpp
libaegisub/lua/utils.cpp
libaegisub/osx/dispatch.mm
libaegisub/osx/spellchecker.mm
libaegisub/osx/util.mm
libaegisub/unix/access.cpp
libaegisub/unix/fs.cpp
libaegisub/unix/log.cpp
libaegisub/unix/path.cpp
libaegisub/unix/util.cpp
libaegisub/windows/access.cpp
libaegisub/windows/charset_conv_win.cpp
libaegisub/windows/fs.cpp
libaegisub/windows/log_win.cpp
libaegisub/windows/path_win.cpp
libaegisub/windows/util_win.cpp
packages/win_installer/build_dictionary_installers.sh
src/ass_attachment.cpp
src/ass_attachment.h
src/ass_entry.cpp
src/ass_file.cpp
src/ass_info.h
src/ass_karaoke.cpp
src/ass_karaoke.h
src/ass_parser.cpp
src/ass_parser.h
src/async_video_provider.cpp
src/async_video_provider.h
src/audio_karaoke.cpp
src/audio_karaoke.h
src/audio_marker.cpp
src/audio_marker.h
src/audio_provider_factory.cpp
src/audio_provider_factory.h
src/audio_timing_karaoke.cpp
src/colour_button.cpp
src/colour_button.h
src/command/command.cpp
src/command/command.h
src/command/vis_tool.cpp
src/context.cpp
src/crash_writer.cpp
src/crash_writer.h
src/crash_writer_minidump.cpp
src/dialog_autosave.cpp
src/dialog_dummy_video.cpp
src/dialog_export_ebu3264.cpp
src/dialog_export_ebu3264.h
src/dialog_fonts_collector.cpp
src/dialog_manager.h
src/dialog_progress.cpp
src/dialog_progress.h
src/dialog_resample.cpp
src/dialog_search_replace.cpp
src/dialog_search_replace.h
src/dialog_selected_choices.cpp
src/dialog_selection.cpp
src/dialog_shift_times.cpp
src/dialog_spellchecker.cpp
src/dialog_styling_assistant.cpp
src/dialog_styling_assistant.h
src/dialog_translation.cpp
src/dialog_translation.h
src/dialog_video_properties.cpp
src/dialogs.h
src/factory_manager.h
src/flyweight_hash.h
src/font_file_lister.cpp
src/font_file_lister.h
src/font_file_lister_coretext.mm
src/font_file_lister_fontconfig.cpp
src/font_file_lister_gdi.cpp
src/format.h
src/gl_wrap.cpp
src/gl_wrap.h
src/grid_column.cpp
src/grid_column.h
src/hotkey.cpp
src/hotkey_data_view_model.cpp
src/hotkey_data_view_model.h
src/include/aegisub/context.h
src/include/aegisub/hotkey.h
src/include/aegisub/menu.h
src/include/aegisub/spellchecker.h
src/include/aegisub/toolbar.h
src/initial_line_state.cpp
src/initial_line_state.h
src/libass_gdi_fontselect.cpp
src/libresrc/libresrc.cpp
src/libresrc/libresrc.h
src/menu.cpp
src/mkv_wrap.h
src/options.h
src/osx/osx_utils.mm
src/osx/retina_helper.mm
src/pen.cpp
src/pen.h
src/persist_location.cpp
src/persist_location.h
src/placeholder_ctrl.h
src/preferences.cpp
src/preferences.h
src/preferences_base.cpp
src/preferences_base.h
src/project.cpp
src/project.h
src/res/res.rc
src/resolution_resampler.cpp
src/resolution_resampler.h
src/retina_helper.h
src/search_replace_engine.cpp
src/search_replace_engine.h
src/selection_controller.cpp
src/spellchecker.cpp
src/spellchecker_hunspell.cpp
src/spellchecker_hunspell.h
src/subs_controller.cpp
src/subs_controller.h
src/subtitle_format_ass.cpp
src/subtitle_format_ass.h
src/subtitle_format_ebu3264.cpp
src/subtitle_format_ebu3264.h
src/subtitle_format_ssa.cpp
src/subtitle_format_ssa.h
src/subtitles_provider.cpp
src/subtitles_provider_csri.h
src/subtitles_provider_libass.h
src/text_file_reader.cpp
src/text_file_reader.h
src/text_file_writer.cpp
src/text_file_writer.h
src/text_selection_controller.cpp
src/text_selection_controller.h
src/thesaurus.cpp
src/thesaurus.h
src/toolbar.cpp
src/validators.cpp
src/validators.h
src/value_event.h
src/vector2d.cpp
src/vector2d.h
src/video_frame.cpp
src/video_frame.h
src/video_out_gl.cpp
src/video_out_gl.h
src/video_provider_cache.cpp
src/video_provider_manager.cpp
src/video_provider_manager.h
src/visual_tool.cpp
src/visual_tool.h
src/visual_tool_clip.cpp
src/visual_tool_clip.h
src/visual_tool_cross.cpp
src/visual_tool_cross.h
src/visual_tool_drag.cpp
src/visual_tool_drag.h
src/visual_tool_rotatexy.cpp
src/visual_tool_rotatexy.h
src/visual_tool_rotatez.cpp
src/visual_tool_rotatez.h
src/visual_tool_scale.cpp
src/visual_tool_scale.h
src/visual_tool_vector_clip.cpp
src/visual_tool_vector_clip.h
tests/support/main.cpp
tests/support/main.h
tests/support/util.cpp
tests/support/util.h
tests/tests/access.cpp
tests/tests/audio.cpp
tests/tests/cajun.cpp
tests/tests/calltip_provider.cpp
tests/tests/character_count.cpp
tests/tests/color.cpp
tests/tests/dialogue_lexer.cpp
tests/tests/format.cpp
tests/tests/fs.cpp
tests/tests/hotkey.cpp
tests/tests/iconv.cpp
tests/tests/ifind.cpp
tests/tests/karaoke_matcher.cpp
tests/tests/keyframe.cpp
tests/tests/line_iterator.cpp
tests/tests/line_wrap.cpp
tests/tests/mru.cpp
tests/tests/option.cpp
tests/tests/path.cpp
tests/tests/signals.cpp
tests/tests/split.cpp
tests/tests/syntax_highlight.cpp
tests/tests/thesaurus.cpp
tests/tests/time.cpp
tests/tests/type_name.cpp
tests/tests/util.cpp
tests/tests/uuencode.cpp
tests/tests/vfr.cpp
tests/tests/word_split.cpp
tools/repack-thes-dict.cpp
tools/respack.lua
tools/strip-icu.py
  • Auto scanned with correction:
*No copyright* GNU General Public License, Version 2
----------------------------------------------------
# License explanation packaged in Windows installer, obsolete
packages/win_installer/fragment_strings.iss
packages/win_installer/fragment_strings.iss.in
# All locale file are distributed under the same license with the main project
po/fi.po
po/fr_FR.po
po/pt_BR.po
po/tr.po
po/zh_CN.po
po/zh_TW.po
@CoffeeFlux
Copy link
Member

@arch1t3cht is there any reason we'd care about the dmg? Even for code signing, we're fine with the pkg, right? If it's not useful, we should probably just remove it.

Regarding the license explanation in the installer, that's still accurate afaik since we link against gpl'd ffmpeg.

@TheOneric
Copy link
Contributor

there’s some more discrepancies, i’ve brought up before as a side note in the last bullet point of this comment

Notably the vendored iconv and csri code is LGPL and partly GPL2 respectively. The former could just be dropped at the cost of slightly more hassle for MSVC builds, but the latter cannot and according to the copyright attribution was originally written by equinox (David Lampert) from libasa (which is long since defunct) (the interface itself is not GPL (and likely legally couldn't be enforeced as such anyway) but some implementations are)
In practice these CSRI implementations only exists and is developed in Aegisub nowadays and it really isn’t a vendored subproject, but part of Aegisub’s own source. (I’m also not aware of any other still-existing users of the CSRI interface)

But also as mentioned above, any binary Aegisub build requires GPL libs anyway and Aegisub itself is not a library; tbh I don’t expect there to be any practical implications even if the entire Aegisub C++ code base was suddenly relicenced to GPL.
Just the remark in the README should reflect the actual state with something like “All files not declared otherwise are licenced under BSD-3clause which also the majority of files are licenced under, but several other BSD and a few GPL bits are used.”

@CoffeeFlux
Copy link
Member

CoffeeFlux commented Jan 5, 2025 via email

@EL-File4138
Copy link
Contributor Author

EL-File4138 commented Jan 5, 2025

I'm also uninterested in auditing each file, so I think it can be quickly processed with automating tool by

  • Reading the git history and listing individual committer for Copyleft claim;
  • Assuming all markless files not under subproject to be the same as the project;

I think using SPDX-Identifer for all files should be more clear, including the old file with licensing attribution. But if you want to make it extra clear the automation could be configured to supplement a full license claim.

ISC is functionally the same as BSD-2-Clause (I assume it's just BSD being scanned as ISC), so relicensing to BSD-3-Clause shouldn't be a hassle. And BSD-3-Clause is compatible with GPL, so after much cleaning, we can just say in the License file: "Unless otherwise noticed, Aegisub is distributed under BSD-3-Clause license, but the binary release is distributed under GNU General Public License (GPL) version 2 or later."

I'll do the necessary work in a PR before 3.5.0 ships.

@TheOneric
Copy link
Contributor

so relicensing to BSD-3-Clause shouldn't be a hassle

Why do you want to relicence the files at all? It’s not all that uncommon to have multiple licences in the source code of a single work provided they’re all compatible. E.g. some individual files or modules in the Linux kernel use permissive BSD licences etc and the combined work is then considered effectively GPL2 (since the conditions of all other licences are but a subset of GPL2 — though conventional/safe interpretation may still require distributions to reproduce the original licence notices and/or full text). In libass, besides the main ISC, Unlicense/public-domain (whyhash), NTP (float parsing; basically the same as BSD-2) and BSD-2 (aarch64 assembly utilities/helpers) are used.
Putting in work to relicence from BSD-2 to a less permissive BSD-3 doesn't seem like it will actually bring any improvements to me.

Since you’re not just distributing the source which meets all requirements by defaults, but compiled binaries as well, the latter should indeed be accompanied by a copyright notice with all authors and licences. This includes compiled-in external dependencies.
As a reference, a relatively detailed form of this is used in all Debian packages; see e.g. here for just Aegisub’s own source (it currently duplicates some licence’s full text; it doesn't need to and likely shouldn't). If you want wo use something like this: those copyright files are typically initially generated by licensecheck and then manually checked and cleaned up if necessary.
I suspect just listing all copyright holders with their individual min-max dates followed by all licence notices (short or full text as required) will suffice too, but IANAL and all that.

I don't think any relicencing is required or real-world beneficial here. Just the note in the README and website needs updating and binaries should start to bundle the copyright and licence notices of everything which went into them. For Aegisub itself, the copyright+licence notice likely only needs to be generated and cleaned up once (if listing source paths: with a wildcard match for BSD-3) assuming no new non-BSD-3 files are added.

Reading the git history and listing individual committer for Copyleft claim;

If an author didn’t leave a copyright notice, you don’t need to create one for them; all (sane) licence only require reproducing existing notices. Their copyright exists regardless though, so if you really want to go through with relicencing to something more permissive, yes you’ll need to track all authors. Git history helps here, but considering some stuff got bulk-imported from other projects won't be complete.
(Adding additional clauses to typical "permissive" licences doesn't require the permission of the original authors, but check the actual licence requirements)

I think using SPDX-Identifer for all files should be more clear, including the old file with licensing attribution. But if you want to make it extra clear the automation could be configured to supplement a full license claim.

Depending on the licence, the final distribution may be required to reproduce the full text. As long as it exists and there’s a clear link where it applies, using only SPDX identifiers + author copyright notices in source file is probably fine (for most licences) though

@EL-File4138
Copy link
Contributor Author

Relicensing is a bad idea, got it. Without relicensing, generating copyright notice is still beneficial for the automatic aggregation of README credit in About window. Even if it's still incomplete (could be taking a hack with et, al.), it's still better than the current staled claim.
Then the phrasing would be:

Unless otherwise noticed in individual source code files (This covers ISC, MIT and GPL), Aegisub is distributed under BSD-3-Clause license. The official binary release is distributed under GNU General Public License (GPL) version 2 or later.

Sounds good to you? I'm no expert in licensing either, so if there are concerns I'm happy for the feedback.

Also needs to add some checking to Windows and macOS binary build, and unify claims on the website and in the document.

@aniolm9
Copy link

aniolm9 commented Jan 6, 2025

For the Debian package I had to check the license on all files. This is what I got:

Files: *
Copyright: 2004-2012 Aegisub Project
License: BSD-3-clause

Files: automation/autoload/cleantags-autoload.lua
Copyright: 2007-2009 Muhammad Lukman Nasaruddin
License: Expat

Files: automation/autoload/kara-templater.lua
Copyright: 2005-2010 Niels Martin Hansen
 2005-2010 Rodrigo Braz Monteiro
License: BSD-3-clause

Files: automation/autoload/karaoke-auto-leadin.lua
Copyright: 2005-2011 Niels Martin Hansen
License: BSD-3-clause

Files: automation/autoload/select-overlaps.moon
 automation/autoload/strip-tags.lua
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: automation/demos/*.lua
Copyright: public domain
License: public-domain

Files: automation/include/*
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: automation/include/aegisub/unicode.moon
Copyright: 2005-2010 Niels Martin Hansen
 2005-2010 Rodrigo Braz Monteiro
License: BSD-3-clause

Files: automation/include/aegisub/util.moon
Copyright: 2013 Thomas Goyne
 2005-2010 Niels Martin Hansen
 2005-2010 Rodrigo Braz Monteiro
License: ISC

Files: automation/include/cleantags.lua
Copyright: 2007-2009 Muhammad Lukman Nasaruddin
License: Expat

Files: automation/include/karaskel-auto4.lua
 automation/include/karaskel.lua
 automation/include/utils-auto4.lua
 automation/include/utils.lua
Copyright: 2005-2010 Niels Martin Hansen
 2005-2010 Rodrigo Braz Monteiro
License: BSD-3-clause

Files: automation/tests/aegisub.cpp
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: automation/tests/modules/*
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: automation/v4-docs/overview.txt
Copyright: 2005, 2006 Niels Martin Hansen
License: BSD-3-clause

Files: libaegisub/*
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: libaegisub/common/charset.cpp
 libaegisub/common/hotkey.cpp
 libaegisub/common/io.cpp
 libaegisub/common/json.cpp
 libaegisub/common/log.cpp
 libaegisub/common/mru.cpp
 libaegisub/common/option.cpp
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: libaegisub/include/libaegisub/access.h
 libaegisub/include/libaegisub/charset.h
 libaegisub/include/libaegisub/hotkey.h
 libaegisub/include/libaegisub/io.h
 libaegisub/include/libaegisub/json.h
 libaegisub/include/libaegisub/log.h
 libaegisub/include/libaegisub/mru.h
 libaegisub/include/libaegisub/option.h
 libaegisub/include/libaegisub/option_value.h
 libaegisub/include/libaegisub/util.h
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: libaegisub/include/libaegisub/exception.h
Copyright: 2005-2011 Niels Martin Hansen
License: BSD-3-clause

Files: libaegisub/include/libaegisub/util_osx.h
Copyright: 2008, 2009, 2011 Niels Martin Hansen
License: ISC

Files: libaegisub/lua/modules/lpeg.*
Copyright: 2014 Lua.org, PUC-Rio
License: Expat

Files: libaegisub/osx/util.mm
Copyright: 2012 Thomas Goyne
License: ISC

Files: libaegisub/unix/*
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: libaegisub/unix/fs.cpp
 libaegisub/unix/path.cpp
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: libaegisub/windows/*
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: libaegisub/windows/charset_conv_win.cpp
 libaegisub/windows/fs.cpp
 libaegisub/windows/path_win.cpp
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: packages/osx_dmg/dmg_set_style.applescript
Copyright: 2006 Jean-Olivier Irisson
License: GPL-2+

Files: packages/win_installer/*
Copyright: 2005-2020 Aegisub Project
License: BSD-3-clause

Files: packages/win_installer/build_dictionary_installers.sh
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: packages/win_installer/dictionaries/sr_SR.iss
Copyright: 2005-2011 Niels Martin Hansen
License: BSD-3-clause

Files: src/*
Copyright: 2010-2016 2022 Thomas Goyne
License: ISC

Files: src/MatroskaParser.c
 src/MatroskaParser.h
Copyright: 2004-2009 Mike Matsnev
License: BSD-2-clause

Files: src/aegisublocale.cpp
 src/aegisublocale.h
 src/ass_dialogue.cpp
 src/ass_dialogue.h
 src/ass_entry.h
 src/ass_export_filter.cpp
 src/ass_export_filter.h
 src/ass_exporter.cpp
 src/ass_exporter.h
 src/ass_file.h
 src/ass_override.h
 src/ass_style.cpp
 src/ass_style.h
 src/ass_style_storage.cpp
 src/ass_style_storage.h
 src/audio_box.h
 src/audio_player.cpp
 src/audio_player_dsound.cpp
 src/audio_player_portaudio.cpp
 src/audio_player_portaudio.h
 src/avisynth_wrap.cpp
 src/avisynth_wrap.h
 src/base_grid.cpp
 src/base_grid.h
 src/dialog_about.cpp
 src/dialog_attachments.cpp
 src/dialog_detached_video.cpp
 src/dialog_detached_video.h
 src/dialog_jumpto.cpp
 src/dialog_paste_over.cpp
 src/dialog_paste_over.h
 src/dialog_properties.cpp
 src/dialog_style_editor.cpp
 src/dialog_style_editor.h
 src/dialog_style_manager.cpp
 src/dialog_timing_processor.cpp
 src/dialog_version_check.cpp
 src/export_fixstyle.cpp
 src/export_fixstyle.h
 src/export_framerate.cpp
 src/export_framerate.h
 src/fft.cpp
 src/fft.h
 src/frame_main.h
 src/gl_text.cpp
 src/gl_text.h
 src/help_button.cpp
 src/help_button.h
 src/main.cpp
 src/main.h
 src/spline.cpp
 src/spline.h
 src/spline_curve.cpp
 src/spline_curve.h
 src/subs_edit_box.h
 src/subs_edit_ctrl.cpp
 src/subs_edit_ctrl.h
 src/subs_preview.cpp
 src/subs_preview.h
 src/subtitle_format.cpp
 src/subtitle_format.h
 src/subtitle_format_encore.cpp
 src/subtitle_format_encore.h
 src/subtitle_format_microdvd.cpp
 src/subtitle_format_microdvd.h
 src/subtitle_format_mkv.h
 src/subtitle_format_srt.cpp
 src/subtitle_format_srt.h
 src/subtitle_format_transtation.cpp
 src/subtitle_format_transtation.h
 src/subtitle_format_ttxt.cpp
 src/subtitle_format_ttxt.h
 src/subtitle_format_txt.cpp
 src/subtitle_format_txt.h
 src/subtitles_provider_csri.cpp
 src/timeedit_ctrl.cpp
 src/timeedit_ctrl.h
 src/toggle_bitmap.cpp
 src/toggle_bitmap.h
 src/utils.cpp
 src/video_box.cpp
 src/video_box.h
 src/video_controller.cpp
 src/video_controller.h
 src/video_display.cpp
 src/video_display.h
 src/video_provider_dummy.cpp
 src/video_slider.cpp
 src/video_slider.h
 src/visual_feature.cpp
 src/visual_feature.h
Copyright: 2005-2010 Rodrigo Braz Monteiro
License: BSD-3-clause

Files: src/ass_override.cpp
 src/subs_edit_box.cpp
Copyright: 2010 Thomas Goyne
 2005 Rodrigo Braz Monteiro
License: BSD-3-clause

Files: src/audio_box.cpp
 src/dialog_export.cpp
 src/frame_main.cpp
 src/tooltip_manager.cpp
 src/tooltip_manager.h
 src/utils.h
Copyright: 2005-2009 Rodrigo Braz Monteiro
 2005-2009 Niels Martin Hansen
License: BSD-3-clause

Files: src/audio_colorscheme.cpp
 src/audio_colorscheme.h
 src/audio_controller.cpp
 src/audio_controller.h
 src/audio_player_alsa.cpp
 src/audio_player_dsound2.cpp
 src/audio_player_openal.cpp
 src/audio_player_pulse.cpp
 src/audio_renderer.cpp
 src/audio_renderer.h
 src/audio_renderer_spectrum.h
 src/audio_renderer_waveform.cpp
 src/audio_renderer_waveform.h
 src/audio_rendering_style.h
 src/audio_timing.h
 src/audio_timing_dialogue.cpp
 src/auto4_base.cpp
 src/auto4_base.h
 src/auto4_lua.cpp
 src/auto4_lua.h
 src/auto4_lua_assfile.cpp
 src/auto4_lua_dialog.cpp
 src/auto4_lua_factory.h
 src/auto4_lua_progresssink.cpp
 src/block_cache.h
 src/colorspace.h
 src/dialog_automation.cpp
 src/dialog_colorpicker.cpp
 src/selection_controller.h
 src/string_codec.cpp
 src/string_codec.h
 src/time_range.h
 src/version.cpp
 src/version.h
 src/video_provider_dummy.h
Copyright: 2005-2011 Niels Martin Hansen
License: BSD-3-clause

Files: src/audio_display.cpp
 src/audio_display.h
 src/audio_renderer_spectrum.cpp
Copyright: 2006-2010 Niels Martin Hansen
 2005, 2006 Rodrigo Braz Monteiro
License: BSD-3-clause

Files: src/audio_player_oss.cpp
Copyright: 2009 Grigori Goronzy
License: BSD-3-clause

Files: src/audio_provider_avs.cpp
Copyright: 2005-2008 Rodrigo Braz Monteiro
 2005-2008 Fredrik Mellbin
License: BSD-3-clause

Files: src/audio_provider_ffmpegsource.cpp
 src/ffmpegsource_common.cpp
 src/ffmpegsource_common.h
 src/video_provider_ffmpegsource.cpp
 src/video_provider_yuv4mpeg.cpp
Copyright: 2008, 2009 Karl Blomster
License: BSD-3-clause

Files: src/avisynth.h
Copyright: 2002 Ben Rudiak-Gould et al.
License: GPL-2+ with special linking exception

Files: src/charset_detect.cpp
 src/charset_detect.h
 src/dialog_log.cpp
Copyright: 2010 Amar Takhar
License: BSD-3-clause

Files: src/colorspace.cpp
Copyright: 2005-2010 Niels Martin Hansen
 2005-2010 Rodrigo Braz Monteiro
License: BSD-3-clause

Files: src/command/*
Copyright: 2010 Amar Takhar
 2005-2010 Rodrigo Braz Monteiro
 2005-2010 Niels Martin Hansen
License: BSD-3-clause

Files: src/command/command.cpp
 src/command/command.h
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: src/command/vis_tool.cpp
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: src/dialog_export_ebu3264.cpp
 src/dialog_export_ebu3264.h
Copyright: 2012 Thomas Goyne
 2011 Niels Martin Hansen
License: ISC

Files: src/dialog_kara_timing_copy.cpp
Copyright: 2009 Niels Martin Hansen
 2005, Dan Donovan
License: BSD-3-clause

Files: src/dialog_text_import.cpp
Copyright: 2007 Alysson Souza e Silva
License: BSD-3-clause

Files: src/dialog_video_details.cpp
Copyright: 2007 Alysson Souza e Silva
License: BSD-3-clause

Files: src/gl/*
Copyright: 2007-2010 The Khronos Group Inc.
License: Expat

Files: src/hotkey.cpp
 src/preferences.cpp
 src/preferences.h
 src/preferences_base.cpp
 src/preferences_base.h
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: src/include/aegisub/audio_player.h
 src/include/aegisub/subtitles_provider.h
Copyright: 2005-2010 Rodrigo Braz Monteiro
License: BSD-3-clause

Files: src/include/aegisub/hotkey.h
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: src/include/aegisub/video_provider.h
Copyright: 2005-2008 Rodrigo Braz Monteiro
 2005-2008 Fredrik Mellbin
License: BSD-3-clause

Files: src/include/agi_pre.h
 src/include/agi_pre_c.h
Copyright: 2005-2010 Rodrigo Braz Monteiro
License: BSD-3-clause

Files: src/libresrc/libresrc.cpp
 src/libresrc/libresrc.h
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: src/mkv_wrap.cpp
Copyright: 2004-2006 Rodrigo Braz Monteiro
 2004-2006 Mike Matsnev
License: BSD-3-clause

Files: src/subtitle_format_ebu3264.cpp
 src/subtitle_format_ebu3264.h
Copyright: 2008, 2009, 2011 Niels Martin Hansen
License: ISC

Files: src/subtitles_provider_libass.cpp
Copyright: 2006, 2007 Rodrigo Braz Monteiro
 2006, 2007 Evgeniy Stepanov
License: BSD-3-clause

Files: src/video_provider_avs.cpp
Copyright: 2006 Fredrik Mellbin
License: BSD-3-clause

Files: subprojects/csri/*
Copyright: 2007 David Lamparter
License: BSD-3-clause

Files: subprojects/csri/backends/libass/libass_csri.c
Copyright: 2006, 2007 David Lamparter
License: GPL-2+

Files: subprojects/csri/frontends/*
Copyright: 2006, 2007 David Lamparter
License: GPL-2+

Files: subprojects/csri/frontends/avisynth25/avisynth.h
Copyright: 2002 Ben Rudiak-Gould et al.
License: GPL-2+ with special linking exception

Files: subprojects/csri/include/visibility.h
Copyright: 2006, 2007 David Lamparter
License: GPL-2+

Files: subprojects/csri/lib/*
Copyright: 2006, 2007 David Lamparter
License: GPL-2+

Files: subprojects/csri/subhelp/*
Copyright: 2006, 2007 David Lamparter
License: GPL-2+

Files: subprojects/luabins/*
Copyright: 2009, 2010 Luabins authors
License: Expat

Files: subprojects/luajit/*
Copyright: 2005-2023 Mike Pall
License: Expat

Files: subprojects/luajit/src/host/minilua.c
 subprojects/luajit/src/lua.h
Copyright: 1994-2012 Lua.org, PUC-Rio
License: Expat

Files: subprojects/luajit/src/lib_aux.c
 subprojects/luajit/src/lib_base.c
 subprojects/luajit/src/lib_debug.c
 subprojects/luajit/src/lib_init.c
 subprojects/luajit/src/lib_io.c
 subprojects/luajit/src/lib_os.c
 subprojects/luajit/src/lib_package.c
 subprojects/luajit/src/lib_string.c
 subprojects/luajit/src/lib_table.c
 subprojects/luajit/src/lj_api.c
 subprojects/luajit/src/lj_func.c
 subprojects/luajit/src/lj_gc.c
 subprojects/luajit/src/lj_lex.c
 subprojects/luajit/src/lj_meta.c
 subprojects/luajit/src/lj_obj.h
 subprojects/luajit/src/lj_parse.c
 subprojects/luajit/src/lj_state.c
 subprojects/luajit/src/lj_tab.c
 subprojects/luajit/src/luajit.c
Copyright: 2005-2023 Mike Pall
 1994-2012 Lua.org, PUC-Rio
License: Expat

Files: subprojects/luajit/src/lj_alloc.h
 subprojects/luajit/src/lj_alloc.c
Copyright: public domain
License: public-domain

Files: tests/support/*
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: tests/support/util.cpp
 tests/support/util.h
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: tests/tests/*
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

Files: tests/tests/access.cpp
 tests/tests/mru.cpp
Copyright: 2009, 2010 Amar Takhar
License: ISC

Files: tools/osx-bundle-restart-helper.m
Copyright: 2005-2011 Niels Martin Hansen
License: BSD-3-clause

Files: tools/osx-dmg.sh
Copyright: 2006-2010 Amar Takhar
License: BSD-3-clause

Files: tools/repack-thes-dict.cpp
 tools/respack.lua
 tools/strip-icu.py
Copyright: 2010-2016, 2022 Thomas Goyne
License: ISC

@TheOneric
Copy link
Contributor

TheOneric commented Jan 6, 2025

Unless otherwise noticed in individual source code files (This covers ISC, MIT and GPL), Aegisub is distributed under BSD-3-Clause license. The official binary release is distributed under GNU General Public License (GPL) version 2 or later.

Sounds good to you? I'm no expert in licensing either, so if there are concerns I'm happy for the feedback.

The "Aegisub is distributed inder BSD-3-Clause" wording is a bit ambiguous wrt to whether the whole project or individual files are meant. How about:

Unless otherwise noted in the individual files, Aegisub source code is distributed under the BSD-3-clause license. Other licenses used in Aegisub source directly include ISC, MIT and GPL-2-or-later.
Official binary builds contain further external components and are effectively distributed under GPL-2-or-later.


For the Debian package I had to check the license on all files. This is what I got:

Thanks! This omits some vendored subprojects though. With all subprojects vendored in the repo and omitting source file paths licensecheck finds the following (using debian licence identifiers). Entried for tools/osx-dmg.sh were manually added, otherwise this is unsanitised auto-guesses (e.g. the Lua BSD-3-clause entries seem erroneous):

# from vendored libiconv:
License: LGPL-2+
Copyright: 1999-2003, 2005, 2008 Free Software Foundation, Inc.
  1999-2002, 2006 Free Software Foundation, Inc.
  1999-2001 Free Software Foundation, Inc.
  2000 Free Software Foundation, Inc.
  1999-2003, 2005-2006, 2008 Free Software Foundation, Inc.
  2003-2006, 2008 Free Software Foundation, Inc.
  1999-2007 Free Software Foundation, Inc.
  2000-2006, 2008-2009 Free Software Foundation, Inc.
  1999-2003, 2005, 2007 Free Software Foundation, Inc.
  1999-2002, 2004-2009 Free Software Foundation, Inc.
  1999-2002, 2004 Free Software Foundation, Inc.
  1999-2001, 2007 Free Software Foundation, Inc.
  2000-2002, 2005-2006, 2008 Free Software Foundation, Inc.
  2003 Free Software Foundation, Inc.
  1999-2002 Free Software Foundation, Inc.
  2001, 2004 Free Software Foundation, Inc.
  2003-2006 Free Software Foundation, Inc.
  1999-2000 Free Software Foundation, Inc.
  2001 Free Software Foundation, Inc.
  1999-2003, 2005 Free Software Foundation, Inc.
  1999-2003, 2008 Free Software Foundation, Inc.
  1999-2008 Free Software Foundation, Inc.
  2003, 2005, 2008 Free Software Foundation, Inc.
  1999-2003 Free Software Foundation, Inc.
  2001, 2005 Free Software Foundation, Inc.
  1999-2001, 2003, 2005, 2008 Free Software Foundation, Inc.
  1999-2001, 2005, 2008 Free Software Foundation, Inc.
  1999-2003, 2005-2006, 2008-2009 Free Software Foundation, Inc.
  2000-2003 Free Software Foundation, Inc.
  1999-2005 Free Software Foundation, Inc.
  2000-2002, 2005-2006, 2008-2009 Free Software Foundation, Inc.
  1999-2002, 2005 Free Software Foundation, Inc.
  2003, 2005 Free Software Foundation, Inc.
  1999-2001, 2005 Free Software Foundation, Inc.
  1999-2004 Free Software Foundation, Inc.
  2005 Free Software Foundation, Inc.
  1999-2001, 2008 Free Software Foundation, Inc.
  1999-2004, 2008 Free Software Foundation, Inc.
  1999-2001, 2004 Free Software Foundation, Inc.
  1999-2001, 2005, 2007 Free Software Foundation, Inc.
  1999-2006 Free Software Foundation, Inc.

License: BSD-3-clause
Copyright: 2008 Rodrigo Braz Monteiro
  2006-2010 Niels Martin Hansen
  2005-2006 Rodrigo Braz Monteiro, Fredrik Mellbin
  2010 Amar Takhar
  2005-2010 Rodrigo Braz Monteiro
  2006-2007 Rodrigo Braz Monteiro, Evgeniy Stepanov
  2005 Rodrigo Braz Monteiro, Niels Martin Hansen
  2010 Niels Martin Hansen
  2007 Alysson Souza e Silva (demi_alucard)
  2009 Karl Blomster
  2006 Fredrik Mellbin
  2009 Niels Martin Hansen
  2005 Dan Donovan (Dansolo)
  2009 Grigori Goronzy
  2008-2009 Karl Blomster
  2007 Rodrigo Braz Monteiro, Niels Martin Hansen
  2011 Niels Martin Hansen
  2006-2007 Niels Martin Hansen
  2006 Rodrigo Braz Monteiro
  2006-2008 Rodrigo Braz Monteiro, Fredrik Mellbin
  2005-2010 Niels Martin Hansen
  2007 David Lamparter
  2005 Rodrigo Braz Monteiro
  2005 Niels Martin Hansen
  2008, 2010 Niels Martin Hansen
  2005-2007 Rodrigo Braz Monteiro
  2007 Niels Martin Hansen
  2004-2009 Mike Matsnev.
  2007 Alysson Souza e Silva
  2009 Lua.org & PUC-Rio (see 'lpeg.html' for license)
  2007 Rodrigo Braz Monteiro
  2007 Lua.org & PUC-Rio (see 'lpeg.html' for license)
  2006 Niels Martin Hansen
  2004-2006 Rodrigo Braz Monteiro, Mike Matsnev
  2009-2010 Niels Martin Hansen
  2005-2009 Rodrigo Braz Monteiro, Niels Martin Hansen
  2010 Thomas Goyne <[email protected]>
  2005 Niels Martin Hansen, Rodrigo Braz Monteiro
  2004-2025 Aegisub Project
  2005-2006 Rodrigo Braz Monteiro

License: ISC
Copyright: 2015 Thomas Goyne <[email protected]>
  2014 Thomas Goyne <[email protected]>
  2022 Thomas Goyne <[email protected]>
  2011 Thomas Goyne <[email protected]>
  2010 Amar Takhar <[email protected]>
  2008-2009 Niels Martin Hansen
  2012 Thomas Goyne <[email protected]>
  2009 Amar Takhar <[email protected]>
  2011 Niels Martin Hansen <[email protected]>
  2016 Thomas Goyne <[email protected]>
  2013 Thomas Goyne <[email protected]>
  2010 Thomas Goyne <[email protected]>

# "MIT" in SPDX naming scheme
License: Expat
Copyright: 2009-2010 Luabins authors"

License: Khronos
Copyright: 2007-2010 The Khronos Group Inc.

License: GPL-2+
Copyright: 2007 David Lamparter
  2002 Ben Rudiak-Gould et al.
  2006 David Lamparter
  2006-2010 Jean-Olivier Irisson
  2006-2010 Michael Wybrow

This could perhaps be further compacted by merging entries of the same licence and author but different dates.

For luajit which isn’t part of the repo but atm most likely statically built into the final binary, after compacting dates it’s:

# "MIT" in SPDX naming scheme
License: Expat
Copyright: 
  1994-2022 Lua.org, PUC-Rio
  2005-2022 Mike Pall 

License: public-domain
Copyright: Doug Lea

@techguru0

This comment was marked as off-topic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants