PokittoLib minor licensing issues

I hope PokittoLib and LibrePokitto will merge together in a near future.

Would be best to do eventually, it’s always best to have to only maintain one thing, but right now there are the discussions about issues that are more important to the majority of people, so it can wait. I want to keep maximum compatibility to minimize any hassle for the users. Ideally you should only notice a slightly different startup screen (intentional for distinction).

1 Like

How do I build the loader? Should I use the old one or the new one (is usable yet?)?

EDIT:

Also I’m having trouble with the loader if using my library. When I press C at start, it either doesn’t find the LOA.DER, or doesn’t flash it (just writes out the version number, if forced then it doesn’t work anyway). What could that be?

1 Like

I have that exact same problem when trying to load @FManga new loader. From what I understood. It’s something about SDFS and/or SD card compatibility…

With the new loader, the issue was that it could not be found. So I guess it’s a bug of the new loader.

So I’ll probably want to use the old one ATM, but with that I have the problem that I can’t install it. Maybe I’ve messed the function from iap.cpp for uploading to flash? Could that be it? Gotta investigate.

EDIT:

Actually nope, I probably just had an old loader, I’ve found a newer one and it works. Still I think it’s built on top of some non-free source files, so if anyone could give me a quick how-to on building the loader, I’d be glad.

Which makefile? There’s a makefile with a license?

Haven’t used this in a while, it probably still works:

# cross-platform directory manipulation
ifeq ($(shell echo $$OS),$$OS)
    MAKEDIR = if not exist "$(1)" mkdir "$(1)"
    RM = rmdir /S /Q "$(1)"
else
    MAKEDIR = '$(SHELL)' -c "mkdir -p \"$(1)\""
    RM = '$(SHELL)' -c "rm -rf \"$(1)\""
endif

OBJDIR := BUILD
SRCDIR := $(CURDIR)

.PHONY: clean

.SUFFIXES:
.SUFFIXES: .cpp .o

vpath %.cpp .
vpath %.c .
vpath %.h .

# Boiler-plate
###############################################################################
# Project settings

PROJECT := Loader

BPROJECT := BUILD/Loader

# Project settings
###############################################################################
# Objects and Paths

OBJECTS += BUILD/C64font.o
OBJECTS += BUILD/font8x8.o
OBJECTS += BUILD/font8x8ext.o
OBJECTS += BUILD/minibuttons.o
OBJECTS += BUILD/miniGFX.o
OBJECTS += BUILD/minijump.o
OBJECTS += BUILD/miniLCD.o
OBJECTS += BUILD/miniload.o
OBJECTS += BUILD/miniprint.o
OBJECTS += BUILD/PokittoLib/POKITTO_HW/iap.o
OBJECTS += BUILD/PokittoLib/POKITTO_CORE/PokittoDisk.o
OBJECTS += BUILD/PokittoLib/libpff/mmc.o
OBJECTS += BUILD/PokittoLib/libpff/pff.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/BusIn.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/BusInOut.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/BusOut.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/CAN.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/CallChain.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/Ethernet.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/FileBase.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/FileLike.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/FilePath.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/FileSystemLike.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/I2C.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/I2CSlave.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/InterruptIn.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/InterruptManager.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/LocalFileSystem.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/RawSerial.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/SPI.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/SPISlave.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/Serial.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/SerialBase.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/Stream.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/Ticker.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/Timeout.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/Timer.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/TimerEvent.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/assert.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/board.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/error.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/gpio.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/lp_ticker_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/mbed_interface.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/pinmap_common.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/retarget.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/rtc_time.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/semihost_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/ticker_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/us_ticker_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/common/wait_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM/TARGET_LPC11U68/startup_LPC11U68.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/cmsis_nvic.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/system_LPC11U6x.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/analogin_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/gpio_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/gpio_irq_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/i2c_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/pinmap.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/pwmout_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/rtc_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/serial_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/sleep.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/spi_api.o
OBJECTS += BUILD/PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X/us_ticker.o

INCLUDE_PATHS += -I./.
INCLUDE_PATHS += -I./PokittoLib
INCLUDE_PATHS += -I./PokittoLib/POKITTO_CORE
INCLUDE_PATHS += -I./PokittoLib/POKITTO_HW
INCLUDE_PATHS += -I./PokittoLib/libpff
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/api
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/common
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/hal
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets/cmsis
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM/TARGET_LPC11U68
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TOOLCHAIN_GCC
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets/hal
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP
INCLUDE_PATHS += -I./PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X

LIBRARY_PATHS :=
LIBRARIES :=
LINKER_SCRIPT ?= loader005.ld

# Objects and Paths
###############################################################################
# Tools and Flags

CDB :=

AS      = $(CDB)	 'arm-none-eabi-gcc' '-x' 'assembler-with-cpp' '-c' '-Wall' '-Wextra' '-Wno-unused-parameter' '-Wno-missing-field-initializers' '-fmessage-length=0' '-fno-exceptions' '-fno-builtin' '-ffunction-sections' '-fdata-sections' '-funsigned-char' '-MMD' '-fno-delete-null-pointer-checks' '-fomit-frame-pointer' '-Os' '-g1' '-DMBED_RTOS_SINGLE_THREAD' '-mcpu=cortex-m0plus' '-mthumb'
CC      = $(CDB)	 'arm-none-eabi-gcc' '-std=gnu89' '-c' '-Wall' '-Wextra' '-Wno-unused-parameter' '-Wno-missing-field-initializers' '-fmessage-length=0' '-fno-exceptions' '-fno-builtin' '-ffunction-sections' '-fdata-sections' '-funsigned-char' '-MMD' '-fno-delete-null-pointer-checks' '-fomit-frame-pointer' '-Os' '-g1' '-DMBED_RTOS_SINGLE_THREAD' '-mcpu=cortex-m0plus' '-mthumb'
CPP     = $(CDB)	 'arm-none-eabi-g++' '-std=gnu++98' '-fno-rtti' '-Wvla' '-c' '-Wall' '-Wextra' '-Wno-unused-parameter' '-Wno-missing-field-initializers' '-fmessage-length=0' '-fno-exceptions' '-fno-builtin' '-ffunction-sections' '-fdata-sections' '-funsigned-char' '-MMD' '-fno-delete-null-pointer-checks' '-fomit-frame-pointer' '-Os' '-g1' '-DMBED_RTOS_SINGLE_THREAD' '-mcpu=cortex-m0plus' '-mthumb'
LD      = $(CDB)	 'arm-none-eabi-gcc' '-Os'
ELF2BIN = 'arm-none-eabi-objcopy'
PREPROC = 'arm-none-eabi-cpp' '-E' '-P' '-Wl,--gc-sections' '-Wl,--wrap,_malloc_r' '-Wl,--wrap,_free_r' '-Wl,--wrap,_realloc_r' '-Wl,--wrap,_memalign_r' '-Wl,--wrap,_calloc_r' '-Wl,--wrap,exit' '-Wl,--wrap,atexit' '-Wl,-n' '--specs=nano.specs' '-mcpu=cortex-m0plus' '-mthumb'


C_FLAGS += -flto
CXX_FLAGS += -flto
C_FLAGS += -DMINILOADHIGH
CXX_FLAGS += -DMINILOADHIGH

C_FLAGS += -std=gnu89
C_FLAGS += -DTARGET_LPC11U68
C_FLAGS += -D__MBED__=1
C_FLAGS += -DDEVICE_I2CSLAVE=1
C_FLAGS += -DTARGET_LIKE_MBED
C_FLAGS += -DTARGET_NXP
C_FLAGS += -D__MBED_CMSIS_RTOS_CM
C_FLAGS += -DDEVICE_RTC=1
C_FLAGS += -DTOOLCHAIN_object
C_FLAGS += -D__CMSIS_RTOS
C_FLAGS += -DTOOLCHAIN_GCC
C_FLAGS += -DTARGET_CORTEX_M
C_FLAGS += -DTARGET_M0P
C_FLAGS += -DTARGET_UVISOR_UNSUPPORTED
C_FLAGS += -DMBED_BUILD_TIMESTAMP=1526086019.89
C_FLAGS += -DDEVICE_SERIAL=1
C_FLAGS += -DDEVICE_INTERRUPTIN=1
C_FLAGS += -DTARGET_LPCTarget
C_FLAGS += -DTARGET_CORTEX
C_FLAGS += -DDEVICE_I2C=1
C_FLAGS += -D__CORTEX_M0PLUS
C_FLAGS += -DTARGET_FF_ARDUINO
C_FLAGS += -DTARGET_RELEASE
C_FLAGS += -DARM_MATH_CM0PLUS
C_FLAGS += -DTARGET_LPC11U6X
C_FLAGS += -DDEVICE_SLEEP=1
C_FLAGS += -DTOOLCHAIN_GCC_ARM
C_FLAGS += -DDEVICE_SPI=1
C_FLAGS += -DDEVICE_ANALOGIN=1
C_FLAGS += -DDEVICE_PWMOUT=1
C_FLAGS += -DTARGET_LIKE_CORTEX_M0


CXX_FLAGS += -std=gnu++14
CXX_FLAGS += -fno-rtti
CXX_FLAGS += -Wvla
CXX_FLAGS += -DTARGET_LPC11U68
CXX_FLAGS += -D__MBED__=1
CXX_FLAGS += -DDEVICE_I2CSLAVE=1
CXX_FLAGS += -DTARGET_LIKE_MBED
CXX_FLAGS += -DTARGET_NXP
CXX_FLAGS += -D__MBED_CMSIS_RTOS_CM
CXX_FLAGS += -DDEVICE_RTC=1
CXX_FLAGS += -DTOOLCHAIN_object
CXX_FLAGS += -D__CMSIS_RTOS
CXX_FLAGS += -DTOOLCHAIN_GCC
CXX_FLAGS += -DTARGET_CORTEX_M
CXX_FLAGS += -DTARGET_M0P
CXX_FLAGS += -DTARGET_UVISOR_UNSUPPORTED
CXX_FLAGS += -DMBED_BUILD_TIMESTAMP=1526086019.89
CXX_FLAGS += -DDEVICE_SERIAL=1
CXX_FLAGS += -DDEVICE_INTERRUPTIN=1
CXX_FLAGS += -DTARGET_LPCTarget
CXX_FLAGS += -DTARGET_CORTEX
CXX_FLAGS += -DDEVICE_I2C=1
CXX_FLAGS += -D__CORTEX_M0PLUS
CXX_FLAGS += -DTARGET_FF_ARDUINO
CXX_FLAGS += -DTARGET_RELEASE
CXX_FLAGS += -DARM_MATH_CM0PLUS
CXX_FLAGS += -DTARGET_LPC11U6X
CXX_FLAGS += -DDEVICE_SLEEP=1
CXX_FLAGS += -DTOOLCHAIN_GCC_ARM
CXX_FLAGS += -DDEVICE_SPI=1
CXX_FLAGS += -DDEVICE_ANALOGIN=1
CXX_FLAGS += -DDEVICE_PWMOUT=1
CXX_FLAGS += -DTARGET_LIKE_CORTEX_M0

ASM_FLAGS += -x
ASM_FLAGS += assembler-with-cpp
ASM_FLAGS += -D__CMSIS_RTOS
ASM_FLAGS += -D__MBED_CMSIS_RTOS_CM
ASM_FLAGS += -D__CORTEX_M0PLUS
ASM_FLAGS += -DARM_MATH_CM0PLUS
ASM_FLAGS += -I./.
ASM_FLAGS += -I./PokittoLib
ASM_FLAGS += -I./PokittoLib/POKITTO_CORE
ASM_FLAGS += -I./PokittoLib/POKITTO_CORE/FONTS
ASM_FLAGS += -I./PokittoLib/POKITTO_CORE/PALETTES
ASM_FLAGS += -I./PokittoLib/POKITTO_HW
ASM_FLAGS += -I./PokittoLib/POKITTO_LIBS
ASM_FLAGS += -I./PokittoLib/POKITTO_LIBS/ImageFormat
ASM_FLAGS += -I./PokittoLib/POKITTO_LIBS/Synth
ASM_FLAGS += -I./PokittoLib/POKITTO_XTERNALS
ASM_FLAGS += -I./PokittoLib/POKITTO_XTERNALS/Arduino
ASM_FLAGS += -I./PokittoLib/libpff
ASM_FLAGS += -I./PokittoLib/mbed-pokitto
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/api
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/common
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/hal
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets/cmsis
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TARGET_NXP/TARGET_LPC11U6X/TOOLCHAIN_GCC_ARM/TARGET_LPC11U68
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets/cmsis/TOOLCHAIN_GCC
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets/hal
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP
ASM_FLAGS += -I./PokittoLib/mbed-pokitto/targets/hal/TARGET_NXP/TARGET_LPC11U6X


LD_FLAGS :=-Wl,--gc-sections -Wl,-n --specs=nano.specs -mcpu=cortex-m0plus -mthumb -flto -Wl,--undefined=g_pfnVectors
LD_SYS_LIBS :=-Wl,--start-group -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys  -Wl,--end-group

# Tools and Flags
###############################################################################
# Rules

.PHONY: all lst size


all: $(BPROJECT).bin $(BPROJECT).hex size
	+@$(call MAKEDIR,$(OBJDIR))


.s.o:
	+@$(call MAKEDIR,$(dir $@))
	+@echo "Assemble: $(notdir $<)"
	@$(AS) -c $(ASM_FLAGS) -o $@ $<


.S.o:
	+@$(call MAKEDIR,$(dir $@))
	+@echo "Assemble: $(notdir $<)"
	@$(AS) -c $(ASM_FLAGS) -o $@ $<

BUILD/%.o : %.c
	+@$(call MAKEDIR,$(dir $@))
	+@echo "Compile: $(notdir $<)"
	@$(CC) $(C_FLAGS) $(INCLUDE_PATHS) -o $@ $<

BUILD/%.o : %.cpp
	+@$(call MAKEDIR,$(dir $@))
	+@echo "Compile: $(notdir $<)"
	@$(CPP) $(CXX_FLAGS) $(INCLUDE_PATHS) -o $@ $<


$(BPROJECT).link_script.ld: $(LINKER_SCRIPT)
	@$(PREPROC) $< -o $@



$(BPROJECT).elf: $(OBJECTS) $(SYS_OBJECTS) $(BPROJECT).link_script.ld 
	+@echo "link: $(notdir $@)"
	@$(LD) $(LD_FLAGS) -T $(filter-out %.o, $^) $(LIBRARY_PATHS) --output $@ $(filter %.o, $^) $(LIBRARIES) $(LD_SYS_LIBS)


$(BPROJECT).bin: $(BPROJECT).elf
	$(ELF2BIN) -O binary $< $@
	+@echo "===== bin file ready to flash: $(OBJDIR)/$@ =====" 

$(BPROJECT).hex: $(BPROJECT).elf
	$(ELF2BIN) -O ihex $< $@


# Rules
###############################################################################
# Dependencies

DEPS = $(OBJECTS:.o=.d) $(SYS_OBJECTS:.o=.d)
-include $(DEPS)
# endif

# Dependencies
###############################################################################

clean :
	$(call RM,$(OBJDIR))
1 Like

The Makefile I got from you, most of it is from this template, which is Apache 2.0. I just linked back to that repository so that it’s clear it’s not been “stolen” from someone. It’s good to do when releasing something publicly – when using it privately it makes little sense of course.

Hmm… never thought of licenses applying to Makefiles. Always saw them as configuration, not actual code. :thinking:

1 Like

Not sure either, anyway better be safe. Copyright applies not only to code, but any creative work. Whether any art goes into writing a Makefile I don’t even wanna know.

I wonder how cool would it be to actually print and frame the content of a makefile… Might actually be cool for some lol

1 Like

I think computer code is treated as a literary work – a poem maybe? :smile: People do write poems in Perl.

Does this mean I’m going to have to start licensing my .ini files? :P

Hmmm, it sounds ridiculous but serious programs should do this – and that’s why I always try to license the software as a whole, i.e. the whole repo. Otherwise you’re getting into borderline cases and playing a lottery.

Can writing a config be a creative process in the same way programming is? Is it a program or data? (Don’t forget data can be proprietary as well). What if it’s a config of a program that generates some form of art – isn’t it a part of the art then? Does the config contain executable code (and what is an executable code)? How long exactly does a text have to be to become copyrightable?

Better just stick that license and avoid these questions.

A similar issue I thought about when releasing the latest version of the Arduboy2 library, which probably also applies to some Pokitto libraries:

Documentation for the library is created from specially formatted comments in the library’s source code header files. This text is processed by the Doxygen processing program to produce documentation in various formats, including the HTML and PDF that I make available.

The source code for the library, thus including the Doxygen formatted comments, is covered by BSD and MIT licences. So is the “meta” documentation, output by Doxygen, automatically covered under the same licence or is it assumed to have no licence unless one is specifically stated?

Since this is documentation, not source code, it may be better to use a more suitable licence for it, such as one of the Creative Commons ones. It would be possible to include such a licence in the formatted output by instructing Doxygen to process and include an input file containing this license, and I guess such a file should also have a licence.

Another consideration is that the Doxygen input and output is controlled using a “configuration” file similar to what a Makefile is for programs. I suppose the discussion of a licence for a Makefile in this thread would apply similarly.

The documentation text is under those licenses as they’re part of the code. Since they’re permissive licenses, you can take them and transform them into something which is NOT automatically licensed the same, you can make it proprietary. However, automatically processing it with software is certainly NOT a creative process, so I think the result is free as well. Anyone can replicate the process and create the same documentation themselves, there’s nothing creative you add in the process, EXCEPT maybe the Doxyfile, i.e. the configuration. This I think is the borderline case and depends on how much original work you’ve added – if you’ve changed two lines in the Doxyfile, there’s nothing to talk about (in the same way you can’t demand copyright for a three word text). But if you build your own color palettes and include some long texts, that could be seen as a work protected by copyright, which you would have to explicitly license again.

By that argument, compiling code isn’t a creative process because anyone with a correctly configured compiler can compile source code (“process the source with software”).

Surely the same logic applied to compilation should apply here?
The author manually creates the documentation comments, therefore it is a creative process and the HTML generation step is merely a way of reformatting the already human-created information, in the same way that compiling is merely a way of reformatting source code.

Sure, compilation is the same thing, no extra creative work emerges there. E.g. if you take an MIT licensed code and compile that, you don’t get copyright for the binary, meaning anyone else can create the same binary and do whatever they wish with it.

Yes, it is a non-creative step applied to creative work – so no extra rights come to existence, but the rights that already exist still apply.

Just F.Y.I. in the Doxygen license section of the Doxygen documentation’s home page (Doxygen itself is GPL licensed) they state:

Documents produced by doxygen are derivative works derived from the input used in their production; they are not affected by this license.

@MLXXXp it seems the purpose of that statement is to make it clear that the GPL doesn’t apply, which is logical here. I though the term derivative work was wrong here, but actually I may have had a wrong understanding of what that term meant – that can happen, IANAL. From Wikipedia:

A derivative work is an expressive creation that includes major copyright-protected elements of an original, previously created first work (the underlying work).

So this fits the documentation – it is an expressive work (the comments it contains make it such) derived from some other expressive work (the source code). The deriving process doesn’t have to be an expressive work though, which is where I’ve misunderstood the term. In other words, it is an expressive work and it is different from the original, but there may have been no extra expressive work to create extra rights.

So yeah, everything seems to fit.

1 Like

Yes. I should have stated that I was quoting the document to point out that the Doxygen organisation considers the output to be a derivative work. As you say, not inheriting the Doxygen licence makes sense.