PokittoLib minor licensing issues

its-so-beautiful-gif-22

1 Like

How big is the minimum binary to boot up Pokitto?

I looked through your asm file and its a work of art.

1 Like

It’s been a little while since I wrote that, I don’t remember the stats any more.

Glad you like it, I hope it can be of use. It isn’t exactly a cleanroom implementation (I tried to keep it 1:1 with the original C++ to make it easier to maintain), so I don’t know if it actually solves the licensing problem.

1 Like

Okay here, only iap.cpp and then the two cmsis files remaining for tomorrow.

I also tried to take care of the Makefile and the upload script which had the same non-free license. TBH my rewrites aren’t 100% clean-room either – I do look at the counterpart source, since that’s what they’ve been explicitly made for anyway, and simply write functions to mimic that behavior – I have no idea what it’s doing even – sometimes I have to keep the identifier names for compatibility and so on, but they’re all from-scratch rewrites, using my own style, as best as I can. Some files shrink to just a few lines after this, which makes them closer to just non-copyrightable snippets. After this pass I think I can even mass-change the identifiers to make it even more distinct from the original. This is probably the best I can do.

That’s not the only issue with that file.

getNoteString doesn’t take the size of the buffer, so there’s a chance it could overflow the buffer,
and it should probably just return a const char * and let the user copy the string anyway,
or if it does need to be a copy, it should accept its array parameter by reference to an array of a fixed size and consider whether strcpy is a better choice than a simple for loop.

Then there’s the matter of the #ifndef WIN32 thing, which isn’t an accurate test.
Instead it should use the facilities of either cstdint or climits.

Then there’s the issue of using * 128 instead of << 7 and * 8 instead of << 3.
(One should typically use either bitwise operators or mathematical operators, not attempt to mix the two.)

There’s also the arptable not marked as const and the fact note_table could be condensed into a single 2D array instead of an array of pointers.

1 Like

Phew, looks like I’m done, everything should be free now. I’ve managed to break sound in the process but I’ve fixed it again. From testing on a few games it looks like both sound and EEPROM (the two things I’ve been heavily modifying) are working.

Tomorrow I’ll go over all the files again, double check everything and test games and programs and adjust them to work well with my copy of the library (I am using slightly different font clones etc., which sometimes misaligns text and stuff, but nothing serious). While doing this I’ll probably create a collection of these games and include them in my repo, to serve as a happy small island for freedom freaks like me. Then I’ll publish that and back to making games.

1 Like

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.