All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
@ 2013-09-08 13:15 Thomas Petazzoni
  2013-09-08 13:15 ` [Buildroot] [PATCH 1/3] Makefile: factorize *config dependencies Thomas Petazzoni
                   ` (4 more replies)
  0 siblings, 5 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-08 13:15 UTC (permalink / raw)
  To: buildroot

Hello,

Following the e-mail from Ryan Barnett entitled "[RFC] New feature to
handle a custom board folder", I finally took a bit of time to
implement how I think the support for externally stored Buildroot
customization should be done.

I really think the approach of having board-related configuration
options within Buildroot is wrong: it is the Buildroot configuration
as a whole that defines what the configuration of the user system is:
a combination of a kernel, a root filesystem with various packages, a
selection of a root filesystem image format, some system configuration
tuning, a bootloader, etc.

In Ryan e-mail, I believe the most important thing is the wish to
store the board-specific details outside of the Buildroot tree. In
fact, this is already possible: nothing prevents anyone from using
$(TOPDIR)/../company/kernel.config as the kernel configuration file
for example, where $(TOPDIR)/../company/ is outside of the Buildroot
tree, and versioned in a completely different way.

However, it seems like this possibility is not 'visible' enough, and
admittedly only usable for some Buildroot configuration elements,
while an user may also be interested in storing Buildroot package
recipes and Buildroot deconfig files outside of the main Buildroot
tree.

So, this patch set adds the BR2_EXTERNAL mechanism. It is very
lightweight, and doesn't change anything to the Buildroot overall
logic. Basically, BR2_EXTERNAL is an environment variable that one can
point to a directory that will contain Buildroot customizations. It is
then usable for three things:

 * It is available as $(BR2_EXTERNAL) within all of the Buildroot
   configuration options, to define the location of the kernel
   configuration file, the root filesystem overlay, etc.

 * It allows to store package recipes in $(BR2_EXTERNAL)/package/,
   exactly like the package/ directory of Buildroot. Buildroot will
   automatically include $(BR2_EXTERNAL)/Config.in under the top-level
   menu 'Target packages' menu, and will include
   $(BR2_EXTERNAL)/external.mk at the makefile level. So by adding a
   simple $(BR2_EXTERNAL)/Config.in and $(BR2_EXTERNAL)/external.mk,
   one can store package recipes outside Buildroot. See the manual
   update (PATCH 3) for details.

 * It allows to store defconfigs in $(BR2_EXTERNAL)/configs/. They
   appear automatically in 'make help' and can be loaded like any
   other defconfig using 'make <something>_defconfig'.

Best regards,

Thomas

Thomas Petazzoni (3):
  Makefile: factorize *config dependencies
  Add support for BR2_EXTERNAL
  docs/manual: add explanations about BR2_EXTERNAL

 Config.in                            |   6 +-
 Makefile                             |  64 +++++++++++++-------
 docs/manual/customize-outside-br.txt | 110 +++++++++++++++++++++++++++++++++++
 docs/manual/customize.txt            |   2 +
 docs/manual/manual.mk                |   2 +-
 5 files changed, 161 insertions(+), 23 deletions(-)
 create mode 100644 docs/manual/customize-outside-br.txt

-- 
1.8.1.2

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 1/3] Makefile: factorize *config dependencies
  2013-09-08 13:15 [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization Thomas Petazzoni
@ 2013-09-08 13:15 ` Thomas Petazzoni
  2013-09-11  2:06   ` rjbarnet at rockwellcollins.com
  2013-09-11 17:39   ` Yann E. MORIN
  2013-09-08 13:15 ` [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL Thomas Petazzoni
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-08 13:15 UTC (permalink / raw)
  To: buildroot

All of the *config targets have common dependencies. Currently, the
only common dependency is the 'outputmakefile' target, but as we are
going to add one more, it makes sense to factorize these common
dependencies under the COMMON_CONFIG_DEPS variable.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 Makefile | 37 ++++++++++++++++++++-----------------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/Makefile b/Makefile
index 0d7476a..fc55b87 100644
--- a/Makefile
+++ b/Makefile
@@ -633,43 +633,46 @@ COMMON_CONFIG_ENV = \
 	KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \
 	BUILDROOT_CONFIG=$(BUILDROOT_CONFIG)
 
-xconfig: $(BUILD_DIR)/buildroot-config/qconf outputmakefile
+COMMON_CONFIG_DEPS = \
+	outputmakefile
+
+xconfig: $(BUILD_DIR)/buildroot-config/qconf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
 
-gconfig: $(BUILD_DIR)/buildroot-config/gconf outputmakefile
+gconfig: $(BUILD_DIR)/buildroot-config/gconf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) srctree=$(TOPDIR) $< $(CONFIG_CONFIG_IN)
 
-menuconfig: $(BUILD_DIR)/buildroot-config/mconf outputmakefile
+menuconfig: $(BUILD_DIR)/buildroot-config/mconf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
 
-nconfig: $(BUILD_DIR)/buildroot-config/nconf outputmakefile
+nconfig: $(BUILD_DIR)/buildroot-config/nconf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
 
-config: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+config: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
 
-oldconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+oldconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< --oldconfig $(CONFIG_CONFIG_IN)
 
-randconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+randconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< --randconfig $(CONFIG_CONFIG_IN)
 
-allyesconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+allyesconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< --allyesconfig $(CONFIG_CONFIG_IN)
 
-allnoconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+allnoconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< --allnoconfig $(CONFIG_CONFIG_IN)
 
-randpackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+randpackageconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@grep -v BR2_PACKAGE_ $(BUILDROOT_CONFIG) > $(CONFIG_DIR)/.config.nopkg
 	@grep '^config BR2_PACKAGE_' Config.in.legacy | \
@@ -680,7 +683,7 @@ randpackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
 		$< --randconfig $(CONFIG_CONFIG_IN)
 	@rm -f $(CONFIG_DIR)/.config.nopkg
 
-allyespackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+allyespackageconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@grep -v BR2_PACKAGE_ $(BUILDROOT_CONFIG) > $(CONFIG_DIR)/.config.nopkg
 	@grep '^config BR2_PACKAGE_' Config.in.legacy | \
@@ -691,7 +694,7 @@ allyespackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
 		$< --allyesconfig $(CONFIG_CONFIG_IN)
 	@rm -f $(CONFIG_DIR)/.config.nopkg
 
-allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@grep -v BR2_PACKAGE_ $(BUILDROOT_CONFIG) > $(CONFIG_DIR)/.config.nopkg
 	@$(COMMON_CONFIG_ENV) \
@@ -699,23 +702,23 @@ allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
 		$< --allnoconfig $(CONFIG_CONFIG_IN)
 	@rm -f $(CONFIG_DIR)/.config.nopkg
 
-silentoldconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+silentoldconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	$(COMMON_CONFIG_ENV) $< --silentoldconfig $(CONFIG_CONFIG_IN)
 
-olddefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+olddefconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN)
 
-defconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+defconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) $(CONFIG_CONFIG_IN)
 
-%_defconfig: $(BUILD_DIR)/buildroot-config/conf $(TOPDIR)/configs/%_defconfig outputmakefile
+%_defconfig: $(BUILD_DIR)/buildroot-config/conf $(TOPDIR)/configs/%_defconfig $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< --defconfig=$(TOPDIR)/configs/$@ $(CONFIG_CONFIG_IN)
 
-savedefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
+savedefconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< \
 		--savedefconfig=$(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig) \
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-08 13:15 [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization Thomas Petazzoni
  2013-09-08 13:15 ` [Buildroot] [PATCH 1/3] Makefile: factorize *config dependencies Thomas Petazzoni
@ 2013-09-08 13:15 ` Thomas Petazzoni
  2013-09-11  2:03   ` rjbarnet at rockwellcollins.com
                     ` (3 more replies)
  2013-09-08 13:15 ` [Buildroot] [PATCH 3/3] docs/manual: add explanations about BR2_EXTERNAL Thomas Petazzoni
                   ` (2 subsequent siblings)
  4 siblings, 4 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-08 13:15 UTC (permalink / raw)
  To: buildroot

This commit adds support for an environment variable named
BR2_EXTERNAL, which the user can point to a directory outside of
Buildroot that contains root filesystem overlays, kernel configuration
files, package recipes, defconfigs, etc. It allows users to keep their
specific Buildroot customizations outside of the Buildroot tree.

BR2_EXTERNAL allows:

 (1) To use $(BR2_EXTERNAL) in all Buildroot configuration options
     that take a path as argument. This allows to reference a root
     filesystem overlay, a kernel configuration file, a Barebox
     configuration file located in the BR2_EXTERNAL directory.

 (2) To store external package or makefile logic, since the
     BR2_EXTERNAL/external.mk file is automatically included by the
     Makefile logic, and the BR2_EXTERNAL/Config.in file is
     automatically included, and appears in the top-level menu. The
     typical usage would be to create a BR2_EXTERNAL/package/
     directory to contain package definitions.

 (3) To store defconfig files under BR2_EXTERNAL/configs/. They will
     be visible in 'make help' and usable through 'make
     <someboard>_defconfig'.

In terms of implementation, it is relatively straightforward:

 * A BR2_EXTERNAL kconfig variable is added, which is set to the value
   of the BR2_EXTERNAL environment variable.

 * The top-level Config.in file given to kconfig is no longer the main
   Config.in in the Buildroot sources, but instead a toplevel.in file
   generated in the output directory, which includes the top-level
   Buildroot Config.in file and the BR2_EXTERNAL/Config.in file if
   provided. Since is needed because the kconfig 'source' statement
   errors out if the included file doesn't exist. I have written
   patches that add support for an 'isource' statement in kconfig
   (that silently ignores the inclusion if the pointed file doesn't
   exist), but keeping feature patches against kconfig doesn't seem
   like a good idea. Note that the "mainmenu" statement is part of
   this generated file, because it must be the first statement seen in
   the toplevel Config.in file passed to kconfig.

 * The BR2_EXTERNAL/external.mk makefile gets included.

 * The BR2_EXTERNAL environment variable gets passed in the
   environment of kconfig and when executing the kconfiglib-based
   Python script that updates the manual, so that the references to
   the BR2_EXTERNAL variable within Config.in files can be resolved.

 * The 'make help' and 'make %_defconfig' targets are updated to take
   into account the defconfig files stored under
   BR2_EXTERNAL/configs/.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 Config.in             |  6 ++++--
 Makefile              | 29 +++++++++++++++++++++++++----
 docs/manual/manual.mk |  2 +-
 3 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/Config.in b/Config.in
index cb246a4..7e253c6 100644
--- a/Config.in
+++ b/Config.in
@@ -1,7 +1,5 @@
 #
 
-mainmenu "Buildroot $BR2_VERSION Configuration"
-
 config BR2_HAVE_DOT_CONFIG
 	bool
 	default y
@@ -14,6 +12,10 @@ config BR2_HOSTARCH
 	string
 	option env="HOSTARCH"
 
+config BR2_EXTERNAL
+	string
+	option env="BR2_EXTERNAL"
+
 # Hidden boolean selected by pre-built packages for x86, when they
 # need to run on x86-64 machines (example: pre-built external
 # toolchains, binary tools like SAM-BA, etc.).
diff --git a/Makefile b/Makefile
index fc55b87..1014399 100644
--- a/Makefile
+++ b/Makefile
@@ -47,7 +47,6 @@ export HOSTARCH := $(shell uname -m | \
 
 # absolute path
 TOPDIR:=$(shell pwd)
-CONFIG_CONFIG_IN=Config.in
 CONFIG=support/kconfig
 DATE:=$(shell date +%Y%m%d)
 
@@ -339,6 +338,10 @@ include boot/common.mk
 include linux/linux.mk
 include system/system.mk
 
+ifneq ($(BR2_EXTERNAL),)
+include $(BR2_EXTERNAL)/external.mk
+endif
+
 TARGETS+=target-finalize
 
 ifeq ($(BR2_ENABLE_LOCALE_PURGE),y)
@@ -622,6 +625,18 @@ $(BUILD_DIR)/buildroot-config/%onf:
 	mkdir -p $(@D)/lxdialog
 	$(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)" obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
 
+CONFIG_CONFIG_IN=$(BUILD_DIR)/buildroot-config/toplevel.in
+
+# This is intentionally a virtual target so that the file gets
+# regenerated everytime this target is invoked.
+toplevelin-generate:
+	mkdir -p $(dir $(CONFIG_CONFIG_IN))
+	echo "mainmenu \"Buildroot $$BR2_VERSION Configuration\"" > $(CONFIG_CONFIG_IN)
+	echo "source \"Config.in\"" >> $(CONFIG_CONFIG_IN)
+ifneq ($(BR2_EXTERNAL),)
+	echo "source \"$$BR2_EXTERNAL/Config.in\"" >> $(CONFIG_CONFIG_IN)
+endif
+
 DEFCONFIG = $(call qstrip,$(BR2_DEFCONFIG))
 
 # We don't want to fully expand BR2_DEFCONFIG here, so Kconfig will
@@ -631,10 +646,12 @@ COMMON_CONFIG_ENV = \
 	KCONFIG_AUTOCONFIG=$(BUILD_DIR)/buildroot-config/auto.conf \
 	KCONFIG_AUTOHEADER=$(BUILD_DIR)/buildroot-config/autoconf.h \
 	KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \
-	BUILDROOT_CONFIG=$(BUILDROOT_CONFIG)
+	BUILDROOT_CONFIG=$(BUILDROOT_CONFIG) \
+	BR2_EXTERNAL=$(BR2_EXTERNAL)
 
 COMMON_CONFIG_DEPS = \
-	outputmakefile
+	outputmakefile \
+	toplevelin-generate
 
 xconfig: $(BUILD_DIR)/buildroot-config/qconf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
@@ -718,6 +735,10 @@ defconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< --defconfig=$(TOPDIR)/configs/$@ $(CONFIG_CONFIG_IN)
 
+%_defconfig: $(BUILD_DIR)/buildroot-config/conf $(BR2_EXTERNAL)/configs/%_defconfig $(COMMON_CONFIG_DEPS)
+	@mkdir -p $(BUILD_DIR)/buildroot-config
+	@$(COMMON_CONFIG_ENV) $< --defconfig=$(BR2_EXTERNAL)/configs/$@ $(CONFIG_CONFIG_IN)
+
 savedefconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
 	@mkdir -p $(BUILD_DIR)/buildroot-config
 	@$(COMMON_CONFIG_ENV) $< \
@@ -829,7 +850,7 @@ endif
 	@echo '  make V=0|1             - 0 => quiet build (default), 1 => verbose build'
 	@echo '  make O=dir             - Locate all output files in "dir", including .config'
 	@echo
-	@$(foreach b, $(sort $(notdir $(wildcard $(TOPDIR)/configs/*_defconfig))), \
+	@$(foreach b, $(sort $(notdir $(wildcard $(TOPDIR)/configs/*_defconfig $(BR2_EXTERNAL)/configs/*_defconfig))), \
 	  printf "  %-35s - Build for %s\\n" $(b) $(b:_defconfig=);)
 	@echo
 	@echo 'See docs/README, or generate the Buildroot manual for further details'
diff --git a/docs/manual/manual.mk b/docs/manual/manual.mk
index 4906bc8..8e0ab30 100644
--- a/docs/manual/manual.mk
+++ b/docs/manual/manual.mk
@@ -1,6 +1,6 @@
 manual-update-lists:
 	$(Q)$(call MESSAGE,"Updating the manual lists...")
-	$(Q)BR2_DEFCONFIG="" TOPDIR=$(TOPDIR) O=$(O)/docs/manual/.build \
+	$(Q)BR2_DEFCONFIG="" BR2_EXTERNAL="$(BR2_EXTERNAL)" TOPDIR=$(TOPDIR) O=$(O)/docs/manual/.build \
 		$(TOPDIR)/support/scripts/gen-manual-lists.py
 
 ################################################################################
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 3/3] docs/manual: add explanations about BR2_EXTERNAL
  2013-09-08 13:15 [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization Thomas Petazzoni
  2013-09-08 13:15 ` [Buildroot] [PATCH 1/3] Makefile: factorize *config dependencies Thomas Petazzoni
  2013-09-08 13:15 ` [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL Thomas Petazzoni
@ 2013-09-08 13:15 ` Thomas Petazzoni
  2013-09-11  2:09   ` rjbarnet at rockwellcollins.com
  2013-09-12 21:46   ` Arnout Vandecappelle
  2013-09-11  1:32 ` [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization rjbarnet at rockwellcollins.com
  2013-09-11  5:00 ` Baruch Siach
  4 siblings, 2 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-08 13:15 UTC (permalink / raw)
  To: buildroot

This commit updates the manual to add details on how to use the
BR2_EXTERNAL feature.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 docs/manual/customize-outside-br.txt | 110 +++++++++++++++++++++++++++++++++++
 docs/manual/customize.txt            |   2 +
 2 files changed, 112 insertions(+)
 create mode 100644 docs/manual/customize-outside-br.txt

diff --git a/docs/manual/customize-outside-br.txt b/docs/manual/customize-outside-br.txt
new file mode 100644
index 0000000..81a8911
--- /dev/null
+++ b/docs/manual/customize-outside-br.txt
@@ -0,0 +1,110 @@
+// -*- mode:doc -*- ;
+
+[[outside-br-custom]]
+Keeping customization outside Buildroot
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+While the Buildroot community recommends and encourages upstreaming to
+the official Buildroot version the packages and boards support that
+are written by developers, it is sometimes not possible or desirable,
+due to these packages or boards being highly specific or proprietary.
+
+In this case, Buildroot users are offered two choices:
+
+ * They can add their packages, board support and configuration files
+   directly within the Buildroot tree, and maintain them by using
+   branches in a version control system.
+
+ * They can use the +BR2_EXTERNAL+ mechanism, which allows to keep
+   package recipes, board support and configuration files outside of
+   the Buildroot tree, while still having them nicely integrated in
+   the build logic. The following paragraphs give details on how to
+   use +BR2_EXTERNAL+.
+
++BR2_EXTERNAL+ is an environment variable that one can use to point to
+a directory that contains Buildroot customizations. This environment
+variable must be passed everytime a Buildroot +make+ command is
+invoked, be it at configuration time (+make menuconfig+, +make
+xconfig+, etc.), at build time (+make+) or any other Buildroot command
+(+make source+, +make legal-info+, etc.).
+
+Examples:
+
+-----
+ buildroot/ $ make BR2_EXTERNAL=../company menuconfig
+ buildroot/ $ make BR2_EXTERNAL=../company
+-----
+
+This +BR2_EXTERNAL+ then allows three different things:
+
+ * One can store all the board-specific configuration files here, such
+   as the kernel configuration, the root filesystem overlay, or any
+   other configuration file for which Buildroot allows to set its
+   location. The +BR2_EXTERNAL+ value is available within the
+   Buildroot configuration using +$(BR2_EXTERNAL)+. As an example, one
+   could set the +BR2_ROOTFS_OVERLAY+ Buildroot option to
+   +$(BR2_EXTERNAL)/board/someboard/overlay/+ (to specify a root
+   filesystem overlay), or the +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+
+   Buildroot option to +$(BR2_EXTERNAL)/board/someboard/kernel.config+
+   (to specify the location of the kernel configuration file).
++
+To achieve this, it is recommended but not mandatory, to store those
+   details in directories called +board/<boardname>/+ under
+   +BR2_EXTERNAL+.
+
+ * One can store package recipes (i.e +Config.in+ and
+   +<packagename>.mk+), or even custom configuration options and make
+   logic. Buildroot automatically includes +BR2_EXTERNAL/Config.in+ to
+   make it appear in the top-level configuration menu, and includes
+   +BR2_EXTERNAL/external.mk+ with the rest of the makefile logic.
++
+The main usage of this would be to store package recipes. The
+   recommended way to do this is to write a +BR2_EXTERNAL/Config.in+
+   that looks like:
++
+------
+menu "<somecompany> packages"
+
+source "$BR2_EXTERNAL/package/package1/Config.in"
+source "$BR2_EXTERNAL/package/package2/Config.in"
+
+endmenu
+------
++
+Then, have a +BR2_EXTERNAL/external.mk' file that looks like:
++
+------
+include $(BR2_EXTERNAL)/package/*/*.mk
+------
++
+And then in +BR2_EXTERNAL/package/package1+ and
+   +BR2_EXTERNAL/package/package2+ create normal Buildroot package
+   recipes, as explained in xref:adding-packages[].
+
+ * One can store Buildroot defconfigs in the +configs+ subdirectory of
+   +BR2_EXTERNAL+. Buildroot will automatically show them in the
+   output of +make help+ and allow them to be loaded with the normal
+   +make <name>_defconfig+ command.
+
+In the end, a typical +BR2_EXTERNAL+ directory organization would
+generally be:
+
+-----
+??? Config.in
+??? external.mk
+??? board/
+?   ??? <someboard>/
+?       ??? overlay/
+?           ??? etc/
+?               ??? <some file>
+??? configs/
+?   ??? <some board>_defconfig
+??? package/
+    ??? Config.in
+    ??? package1/
+        ??? Config.in
+        ??? package1.mk
+    ??? package2/
+        ??? Config.in
+        ??? package2.mk
+------
diff --git a/docs/manual/customize.txt b/docs/manual/customize.txt
index 0456ef1..7e46fd8 100644
--- a/docs/manual/customize.txt
+++ b/docs/manual/customize.txt
@@ -17,3 +17,5 @@ include::customize-toolchain.txt[]
 include::customize-store.txt[]
 
 include::customize-packages.txt[]
+
+include::customize-outside-br.txt[]
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-08 13:15 [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization Thomas Petazzoni
                   ` (2 preceding siblings ...)
  2013-09-08 13:15 ` [Buildroot] [PATCH 3/3] docs/manual: add explanations about BR2_EXTERNAL Thomas Petazzoni
@ 2013-09-11  1:32 ` rjbarnet at rockwellcollins.com
  2013-09-11  7:17   ` Thomas Petazzoni
  2013-09-11  5:00 ` Baruch Siach
  4 siblings, 1 reply; 84+ messages in thread
From: rjbarnet at rockwellcollins.com @ 2013-09-11  1:32 UTC (permalink / raw)
  To: buildroot

Thomas - 

Thank you so much for this patchset as it address the biggest issue that
my company currently has with buildroot and will help us become a much 
bigger
contributer to buildroot since we can move to a model that is conducive to
contributing changes back up to buildroot.

See my other comments below. I'm currently testing the patchset out and 
will
be commenting on this shortly.

Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on 09/08/2013 
08:15:26 AM:

> Hello,
> 
> Following the e-mail from Ryan Barnett entitled "[RFC] New feature to
> handle a custom board folder", I finally took a bit of time to
> implement how I think the support for externally stored Buildroot
> customization should be done.

After getting feedback from Arnout my idea of how this shifted towards 
the model that you've implemented here in this patchset. However, without
intimate knowledge of top-level make structure/kconfig, I didn't quite
visualize this implementation.

With  the Buildroot mailing list I did not see this patchset until this
morning so you can disregard my thoughts about my second revision of how 
to approach this problem even though I was starting to gravitate towards
this approach. However, my reasoning of why I would like to push for some
thing like this still stand.

> I really think the approach of having board-related configuration
> options within Buildroot is wrong: it is the Buildroot configuration
> as a whole that defines what the configuration of the user system is:
> a combination of a kernel, a root filesystem with various packages, a
> selection of a root filesystem image format, some system configuration
> tuning, a bootloader, etc.

I definitely agree!

> In Ryan e-mail, I believe the most important thing is the wish to
> store the board-specific details outside of the Buildroot tree. In
> fact, this is already possible: nothing prevents anyone from using
> $(TOPDIR)/../company/kernel.config as the kernel configuration file
> for example, where $(TOPDIR)/../company/ is outside of the Buildroot
> tree, and versioned in a completely different way.

Yes this is correct. The biggest challenge is differentating our company's
proprity changes with changes that we have brought in from the buildroot
comminuity as a project progresses through it's development stages. It
is definitely a change when not being able to use git.

> However, it seems like this possibility is not 'visible' enough, and
> admittedly only usable for some Buildroot configuration elements,
> while an user may also be interested in storing Buildroot package
> recipes and Buildroot deconfig files outside of the main Buildroot
> tree.

I agree because usually our changes were scattered between board/<company>
and <package/company>. This model allows for use to consolidate outside
of buildroot in one toplevel directory.

> So, this patch set adds the BR2_EXTERNAL mechanism. It is very
> lightweight, and doesn't change anything to the Buildroot overall
> logic. Basically, BR2_EXTERNAL is an environment variable that one can
> point to a directory that will contain Buildroot customizations. It is
> then usable for three things:

Agree that it is very lightweight and minimal.

Thanks Again,
-Ryan



Ryan J Barnett / Software Engineer / Platform SW 
MS 137-157, 855 35th St NE, Cedar Rapids, IA, 52498-3161, US
Phone: 319-263-3880 / VPN: 263-3880 
rjbarnet at rockwellcollins.com
www.rockwellcollins.com 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/2e3c6953/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/gif
Size: 2004 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/2e3c6953/attachment.gif>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-08 13:15 ` [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL Thomas Petazzoni
@ 2013-09-11  2:03   ` rjbarnet at rockwellcollins.com
  2013-09-11 17:03     ` Yann E. MORIN
  2013-09-12 21:05     ` Arnout Vandecappelle
  2013-09-11  2:07   ` rjbarnet at rockwellcollins.com
                     ` (2 subsequent siblings)
  3 siblings, 2 replies; 84+ messages in thread
From: rjbarnet at rockwellcollins.com @ 2013-09-11  2:03 UTC (permalink / raw)
  To: buildroot

Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on 09/08/2013 
08:15:28 AM:

> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>  Config.in             |  6 ++++--
>  Makefile              | 29 +++++++++++++++++++++++++----
>  docs/manual/manual.mk |  2 +-

One idea that I have, is for the make file that is genreated for the an
external output directory, if we could preserve the the value of 
BR2_EXTERNAL
as follows. I don't think my logic is fully there but there is more of a 
sudo implementation:

diff --git a/support/scripts/mkmakefile b/support/scripts/mkmakefile
--- a/support/scripts/mkmakefile
+++ b/support/scripts/mkmakefile
@@ -27,6 +27,7 @@ makedir := \$(dir \$(call lastword,\$(MAKEFILE_LIST)))

 MAKEARGS := -C $1
 MAKEARGS += O=\$(if \$(patsubst /%,,\$(makedir)),\$(CURDIR)/)\$(patsubst 
%/,%,\$(makedir))
+MAKEARGS += BR2_EXTERNAL=\$(realpath \$(BR2_EXTERNAL))

 MAKEFLAGS += --no-print-directory

Again this is only a suggestion but otherwise I'll ack the patchset.

Thanks,
-Ryan




Ryan J Barnett / Software Engineer / Platform SW 
MS 137-157, 855 35th St NE, Cedar Rapids, IA, 52498-3161, US
Phone: 319-263-3880 / VPN: 263-3880 
rjbarnet at rockwellcollins.com
www.rockwellcollins.com 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/0f73d9eb/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/gif
Size: 2004 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/0f73d9eb/attachment.gif>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 1/3] Makefile: factorize *config dependencies
  2013-09-08 13:15 ` [Buildroot] [PATCH 1/3] Makefile: factorize *config dependencies Thomas Petazzoni
@ 2013-09-11  2:06   ` rjbarnet at rockwellcollins.com
  2013-09-11 17:39   ` Yann E. MORIN
  1 sibling, 0 replies; 84+ messages in thread
From: rjbarnet at rockwellcollins.com @ 2013-09-11  2:06 UTC (permalink / raw)
  To: buildroot

Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on 09/08/2013 
08:15:27 AM:

> All of the *config targets have common dependencies. Currently, the
> only common dependency is the 'outputmakefile' target, but as we are
> going to add one more, it makes sense to factorize these common
> dependencies under the COMMON_CONFIG_DEPS variable.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Reviewed-by: Ryan Barnett <rjbarnet@rockwellcollins.com>



Ryan J Barnett / Software Engineer / Platform SW 
MS 137-157, 855 35th St NE, Cedar Rapids, IA, 52498-3161, US
Phone: 319-263-3880 / VPN: 263-3880 
rjbarnet at rockwellcollins.com
www.rockwellcollins.com 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/e6ac348b/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/gif
Size: 2004 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/e6ac348b/attachment-0001.gif>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-08 13:15 ` [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL Thomas Petazzoni
  2013-09-11  2:03   ` rjbarnet at rockwellcollins.com
@ 2013-09-11  2:07   ` rjbarnet at rockwellcollins.com
  2013-09-12 21:04   ` Arnout Vandecappelle
       [not found]   ` <CAC2S8kiHUwNFprvvYd85UEGjDJhEX0Jgtb4e7Pd1vwwFGF7m_w@mail.gmail.com>
  3 siblings, 0 replies; 84+ messages in thread
From: rjbarnet at rockwellcollins.com @ 2013-09-11  2:07 UTC (permalink / raw)
  To: buildroot

Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on 09/08/2013 
08:15:28 AM

> This commit adds support for an environment variable named
> BR2_EXTERNAL, which the user can point to a directory outside of
> Buildroot that contains root filesystem overlays, kernel configuration
> files, package recipes, defconfigs, etc. It allows users to keep their
> specific Buildroot customizations outside of the Buildroot tree.
> 
> BR2_EXTERNAL allows:
> 
>  (1) To use $(BR2_EXTERNAL) in all Buildroot configuration options
>      that take a path as argument. This allows to reference a root
>      filesystem overlay, a kernel configuration file, a Barebox
>      configuration file located in the BR2_EXTERNAL directory.
> 
>  (2) To store external package or makefile logic, since the
>      BR2_EXTERNAL/external.mk file is automatically included by the
>      Makefile logic, and the BR2_EXTERNAL/Config.in file is
>      automatically included, and appears in the top-level menu. The
>      typical usage would be to create a BR2_EXTERNAL/package/
>      directory to contain package definitions.
> 
>  (3) To store defconfig files under BR2_EXTERNAL/configs/. They will
>      be visible in 'make help' and usable through 'make
>      <someboard>_defconfig'.
> 
> In terms of implementation, it is relatively straightforward:
> 
>  * A BR2_EXTERNAL kconfig variable is added, which is set to the value
>    of the BR2_EXTERNAL environment variable.
> 
>  * The top-level Config.in file given to kconfig is no longer the main
>    Config.in in the Buildroot sources, but instead a toplevel.in file
>    generated in the output directory, which includes the top-level
>    Buildroot Config.in file and the BR2_EXTERNAL/Config.in file if
>    provided. Since is needed because the kconfig 'source' statement
>    errors out if the included file doesn't exist. I have written
>    patches that add support for an 'isource' statement in kconfig
>    (that silently ignores the inclusion if the pointed file doesn't
>    exist), but keeping feature patches against kconfig doesn't seem
>    like a good idea. Note that the "mainmenu" statement is part of
>    this generated file, because it must be the first statement seen in
>    the toplevel Config.in file passed to kconfig.
> 
>  * The BR2_EXTERNAL/external.mk makefile gets included.
> 
>  * The BR2_EXTERNAL environment variable gets passed in the
>    environment of kconfig and when executing the kconfiglib-based
>    Python script that updates the manual, so that the references to
>    the BR2_EXTERNAL variable within Config.in files can be resolved.
> 
>  * The 'make help' and 'make %_defconfig' targets are updated to take
>    into account the defconfig files stored under
>    BR2_EXTERNAL/configs/.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Reviewed-by: Ryan Barnett <rjbarnet@rockwellcollins.com>



Ryan J Barnett / Software Engineer / Platform SW 
MS 137-157, 855 35th St NE, Cedar Rapids, IA, 52498-3161, US
Phone: 319-263-3880 / VPN: 263-3880 
rjbarnet at rockwellcollins.com
www.rockwellcollins.com 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/c1e8074b/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/gif
Size: 2004 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/c1e8074b/attachment.gif>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 3/3] docs/manual: add explanations about BR2_EXTERNAL
  2013-09-08 13:15 ` [Buildroot] [PATCH 3/3] docs/manual: add explanations about BR2_EXTERNAL Thomas Petazzoni
@ 2013-09-11  2:09   ` rjbarnet at rockwellcollins.com
  2013-09-12 21:46   ` Arnout Vandecappelle
  1 sibling, 0 replies; 84+ messages in thread
From: rjbarnet at rockwellcollins.com @ 2013-09-11  2:09 UTC (permalink / raw)
  To: buildroot

Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on 09/08/2013 
08:15:29 AM

> This commit updates the manual to add details on how to use the
> BR2_EXTERNAL feature.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Reviewed-by: Ryan Barnett <rjbarnet@rockwellcollins.com>



Ryan J Barnett / Software Engineer / Platform SW 
MS 137-157, 855 35th St NE, Cedar Rapids, IA, 52498-3161, US
Phone: 319-263-3880 / VPN: 263-3880 
rjbarnet at rockwellcollins.com
www.rockwellcollins.com 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/6920bda5/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/gif
Size: 2004 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130910/6920bda5/attachment.gif>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-08 13:15 [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization Thomas Petazzoni
                   ` (3 preceding siblings ...)
  2013-09-11  1:32 ` [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization rjbarnet at rockwellcollins.com
@ 2013-09-11  5:00 ` Baruch Siach
  4 siblings, 0 replies; 84+ messages in thread
From: Baruch Siach @ 2013-09-11  5:00 UTC (permalink / raw)
  To: buildroot

Hi Thomas,

On Sun, Sep 08, 2013 at 03:15:26PM +0200, Thomas Petazzoni wrote:
> Following the e-mail from Ryan Barnett entitled "[RFC] New feature to
> handle a custom board folder", I finally took a bit of time to
> implement how I think the support for externally stored Buildroot
> customization should be done.

Thanks! This set of patched would be very useful for projects I'm involved in.

baruch

-- 
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-11  1:32 ` [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization rjbarnet at rockwellcollins.com
@ 2013-09-11  7:17   ` Thomas Petazzoni
  2013-09-11 15:55     ` Ryan Barnett
  0 siblings, 1 reply; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-11  7:17 UTC (permalink / raw)
  To: buildroot

Ryan,

First of all, thanks for the feedback.

On Tue, 10 Sep 2013 20:32:32 -0500, rjbarnet at rockwellcollins.com wrote:

> Thank you so much for this patchset as it address the biggest issue that
> my company currently has with buildroot and will help us become a much 
> bigger
> contributer to buildroot since we can move to a model that is conducive to
> contributing changes back up to buildroot.

Glad to hear this!

> > Following the e-mail from Ryan Barnett entitled "[RFC] New feature to
> > handle a custom board folder", I finally took a bit of time to
> > implement how I think the support for externally stored Buildroot
> > customization should be done.
> 
> After getting feedback from Arnout my idea of how this shifted towards 
> the model that you've implemented here in this patchset. However, without
> intimate knowledge of top-level make structure/kconfig, I didn't quite
> visualize this implementation.
> 
> With  the Buildroot mailing list I did not see this patchset until this
> morning so you can disregard my thoughts about my second revision of how 
> to approach this problem even though I was starting to gravitate towards
> this approach. However, my reasoning of why I would like to push for some
> thing like this still stand.

Ok. Note that after I posted my patches, I had a discussion with Yann
Morin on IRC and he was skeptical about it, for two reasons:

 (1) Almost all of what BR2_EXTERNAL allows is possible today with the
     current Buildroot. For board level stuff, nothing forces you to
     store it in board/<foo>/ within the Buildroot tree: all of the
     configuration options in Buildroot can use
     $(TOPDIR)/../company/<foo>/ to reference a kernel configuration
     file, or a root filesystem overlay.

     For packages, the 'local.mk' file is already automatically
     included in Buildroot if it exists. So you can create such a file
     and put a "include $(TOPDIR)/../company/external.mk' line in it.
     This external.mk will include all the makefiles of the external
     packages. Since Config.in can't be integrated as easily, one
     solution would be to hardcode BR2_PACKAGE_FOOBAR=y directly within
     external.mk to have it always enabled.

     So, it's already possible today, but I believe the current
     situation is (a) not very easy to use, and (b) not visible enough.
     (b) could be solved by more documentation, but I believe
     BR2_EXTERNAL does not make Buildroot more complicated and solves
     (a) quite nicely.

 (2) Yann's feeling was that by giving a too easy solution to keep
     things out of tree would discourage BR users from contributing
     their new packages upstream, since they can keep it outside of the
     tree nicely. While I certainly admit it can be the case, your
     introduction to this e-mail interestingly points exactly the
     opposite :-)

Best regards,

Thomas Petazzoni
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-11  7:17   ` Thomas Petazzoni
@ 2013-09-11 15:55     ` Ryan Barnett
  2013-09-11 17:27       ` Yann E. MORIN
  0 siblings, 1 reply; 84+ messages in thread
From: Ryan Barnett @ 2013-09-11 15:55 UTC (permalink / raw)
  To: buildroot

Thomas,

Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on 09/11/2013 
02:17:00 AM:

> Ryan,
> 
> First of all, thanks for the feedback.

You're welcome.

> On Tue, 10 Sep 2013 20:32:32 -0500, rjbarnet at rockwellcollins.com wrote:
> 
> > Thank you so much for this patchset as it address the biggest issue 
that
> > my company currently has with buildroot and will help us become a much 

> > bigger
> > contributer to buildroot since we can move to a model that is 
conducive to
> > contributing changes back up to buildroot.
> 
> Glad to hear this!

I'll give bit more detail on how patch could allow our company to be
better contribute back to the buildroot project with this change. During 
development of a project, we could use git to track mainline and any 
third party package that we add support for, we would contribute them 
back upstream. The hope would be that by the time we get to the point
where we have to lock into a specific version of buildroot, our changes
would have been incorporated into buildroot. If not, we could move the
packages that were rejected into the BR2_EXTERNAL location but still
be able to use an off-the-shelve version of buildroot.

> Ok. Note that after I posted my patches, I had a discussion with Yann
> Morin on IRC and he was skeptical about it, for two reasons:
> 
>  (1) Almost all of what BR2_EXTERNAL allows is possible today with the
>      current Buildroot. For board level stuff, nothing forces you to
>      store it in board/<foo>/ within the Buildroot tree: all of the
>      configuration options in Buildroot can use
>      $(TOPDIR)/../company/<foo>/ to reference a kernel configuration
>      file, or a root filesystem overlay.
> 
>      For packages, the 'local.mk' file is already automatically
>      included in Buildroot if it exists. So you can create such a file
>      and put a "include $(TOPDIR)/../company/external.mk' line in it.
>      This external.mk will include all the makefiles of the external
>      packages. Since Config.in can't be integrated as easily, one
>      solution would be to hardcode BR2_PACKAGE_FOOBAR=y directly within
>      external.mk to have it always enabled.

That just becomes nasty and doesn't really easily allow for different 
configurations where you don't always want all your propriety packages
to build. Also it doesn't make your propriety packages visible within
the buildroot menuconfig. The other nice feature is the is that company's
configs are automatically pulled in a separate area.

>      So, it's already possible today, but I believe the current
>      situation is (a) not very easy to use, and (b) not visible enough.
>      (b) could be solved by more documentation, but I believe
>      BR2_EXTERNAL does not make Buildroot more complicated and solves
>      (a) quite nicely.

I definitely agree

>  (2) Yann's feeling was that by giving a too easy solution to keep
>      things out of tree would discourage BR users from contributing
>      their new packages upstream, since they can keep it outside of the
>      tree nicely. While I certainly admit it can be the case, your
>      introduction to this e-mail interestingly points exactly the
>      opposite :-)

While I do understand Yann's concerns, however, I do think that this goes
against buildroot's philosophy - "Buildroot: make Embedded Linux easy". 
Right now it isn't easy for one to make customization to buildroot without
modifying buildroot's source.

Yann - I would welcome you input into this discussion on mailing list 
here.

I'm probably beating this issue to death but I guess I'm very excited 
about
the possibilities that this patchset opens up for my company.

Thanks,
-Ryan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130911/cde71f90/attachment-0001.html>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-11  2:03   ` rjbarnet at rockwellcollins.com
@ 2013-09-11 17:03     ` Yann E. MORIN
  2013-09-11 17:12       ` Ryan Barnett
  2013-09-12 21:05     ` Arnout Vandecappelle
  1 sibling, 1 reply; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-11 17:03 UTC (permalink / raw)
  To: buildroot

Ryan, All,

On 2013-09-10 21:03 -0500, rjbarnet at rockwellcollins.com spake thusly:
> Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on 09/08/2013 
> 08:15:28 AM:
> 
> > 
> > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> > ---
> >  Config.in             |  6 ++++--
> >  Makefile              | 29 +++++++++++++++++++++++++----
> >  docs/manual/manual.mk |  2 +-
> 
> One idea that I have, is for the make file that is genreated for the an
> external output directory, if we could preserve the the value of 
> BR2_EXTERNAL
> as follows. I don't think my logic is fully there but there is more of a 
> sudo implementation:
> 
> diff --git a/support/scripts/mkmakefile b/support/scripts/mkmakefile
> --- a/support/scripts/mkmakefile
> +++ b/support/scripts/mkmakefile
> @@ -27,6 +27,7 @@ makedir := \$(dir \$(call lastword,\$(MAKEFILE_LIST)))
> 
>  MAKEARGS := -C $1
>  MAKEARGS += O=\$(if \$(patsubst /%,,\$(makedir)),\$(CURDIR)/)\$(patsubst 
> %/,%,\$(makedir))
> +MAKEARGS += BR2_EXTERNAL=\$(realpath \$(BR2_EXTERNAL))

Why realpath? I think we should pass the exact value of BR2_EXTERNAL.

Otherwise, I agree that this could be usefull.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-11 17:03     ` Yann E. MORIN
@ 2013-09-11 17:12       ` Ryan Barnett
  0 siblings, 0 replies; 84+ messages in thread
From: Ryan Barnett @ 2013-09-11 17:12 UTC (permalink / raw)
  To: buildroot

"Yann E. MORIN" <yann.morin.1998@gmail.com> wrote on 09/11/2013 12:03:40 
PM:

> > One idea that I have, is for the make file that is genreated for the 
an
> > external output directory, if we could preserve the the value of 
> > BR2_EXTERNAL
> > as follows. I don't think my logic is fully there but there is more of 
a 
> > sudo implementation:
> > 
> > diff --git a/support/scripts/mkmakefile b/support/scripts/mkmakefile
> > --- a/support/scripts/mkmakefile
> > +++ b/support/scripts/mkmakefile
> > @@ -27,6 +27,7 @@ makedir := \$(dir \$(call 
lastword,\$(MAKEFILE_LIST)))
> > 
> >  MAKEARGS := -C $1
> >  MAKEARGS += O=\$(if \$(patsubst 
/%,,\$(makedir)),\$(CURDIR)/)\$(patsubst 
> > %/,%,\$(makedir))
> > +MAKEARGS += BR2_EXTERNAL=\$(realpath \$(BR2_EXTERNAL))
> 
> Why realpath? I think we should pass the exact value of BR2_EXTERNAL.

I would agree, like I said when I suggested this I didn't think it all the
way through other than this feature would be very useful.

> Otherwise, I agree that this could be usefull.
> 
> Regards,
> Yann E. MORIN.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130911/5ef6fd3e/attachment.html>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-11 15:55     ` Ryan Barnett
@ 2013-09-11 17:27       ` Yann E. MORIN
  2013-09-12  7:54         ` Thomas De Schampheleire
  2013-09-12 18:18         ` Thomas Petazzoni
  0 siblings, 2 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-11 17:27 UTC (permalink / raw)
  To: buildroot

Ryan, Thomas, All,

On 2013-09-11 10:55 -0500, Ryan Barnett spake thusly:
> Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on 09/11/2013 
> 02:17:00 AM:
> > On Tue, 10 Sep 2013 20:32:32 -0500, rjbarnet at rockwellcollins.com wrote:
> > > Thank you so much for this patchset as it address the biggest issue 
> that
> > > my company currently has with buildroot and will help us become a much 
> 
> > > bigger
> > > contributer to buildroot since we can move to a model that is 
> conducive to
> > > contributing changes back up to buildroot.
> > 
> > Glad to hear this!

Yes, indeed. It's good to read this would in the end allow people to
contribute more instead of /fighting the system/ ! :-)

> I'll give bit more detail on how patch could allow our company to be
> better contribute back to the buildroot project with this change. During 
> development of a project, we could use git to track mainline and any 
> third party package that we add support for, we would contribute them 
> back upstream. The hope would be that by the time we get to the point
> where we have to lock into a specific version of buildroot, our changes
> would have been incorporated into buildroot. If not, we could move the
> packages that were rejected into the BR2_EXTERNAL location but still
> be able to use an off-the-shelve version of buildroot.

That's funny, because I would have expected exactly the opposite: do
everything in BR2_EXTERNAL, and move them to Buildroot just before
upstreaming them.

But if you (and others) see BR2_EXTERNAL as a faillover for stuff that
could not be upstreamed before you settle on a version of Buildroot,
then I have to say that I'm really happy to read that. :-)

So many companies only upstream their work after-the-fact that it is
indeed a relief to find some that do actually want to push as much as
possible upstream first. Kuddos to you! :-)

> > Ok. Note that after I posted my patches, I had a discussion with Yann
> > Morin on IRC and he was skeptical about it, for two reasons:
> > 
> >  (1) Almost all of what BR2_EXTERNAL allows is possible today with the
> >      current Buildroot. For board level stuff, nothing forces you to
> >      store it in board/<foo>/ within the Buildroot tree: all of the
> >      configuration options in Buildroot can use
> >      $(TOPDIR)/../company/<foo>/ to reference a kernel configuration
> >      file, or a root filesystem overlay.
> > 
> >      For packages, the 'local.mk' file is already automatically
> >      included in Buildroot if it exists. So you can create such a file
> >      and put a "include $(TOPDIR)/../company/external.mk' line in it.
> >      This external.mk will include all the makefiles of the external
> >      packages. Since Config.in can't be integrated as easily, one
> >      solution would be to hardcode BR2_PACKAGE_FOOBAR=y directly within
> >      external.mk to have it always enabled.
> 
> That just becomes nasty and doesn't really easily allow for different 
> configurations where you don't always want all your propriety packages
> to build. Also it doesn't make your propriety packages visible within
> the buildroot menuconfig. The other nice feature is the is that company's
> configs are automatically pulled in a separate area.

The way *I* see this is that Buildroot is not the main /frontend/ of the
build system, but rather a backend. That's the way I use it: I have a
kind of /upper-layer/ build system that uses Buildroot as a kind of
/backend/. I've already introduced it briefly here some time ago, and
wanted to make it a bit more complete before a real annoucement, but
here it is if you want to have a look (it's been public all the time
sicne the beginning  anyway):
    http://ymorin.is-a-geek.org/git/buildroot.config/

(Note, this thread is not about the above, so I think we should not
discuss it further in this thread; let's start another thread if people
are interested).

> >      So, it's already possible today, but I believe the current
> >      situation is (a) not very easy to use, and (b) not visible enough.
> >      (b) could be solved by more documentation, but I believe
> >      BR2_EXTERNAL does not make Buildroot more complicated and solves
> >      (a) quite nicely.
> 
> I definitely agree

Although I do not like the idea on a philosophical point of view, I
agree there is such a need, even more so since you're not the first to
come up with, and try to address, this issue.

So I'm all for making people's lives^Wwork easier, and Thomas' patchset
looks pretty rad (I haven't tested it yet, but I think I could even use
it from my Buildroot.config project! ;-) )

> >  (2) Yann's feeling was that by giving a too easy solution to keep
> >      things out of tree would discourage BR users from contributing
> >      their new packages upstream, since they can keep it outside of the
> >      tree nicely. While I certainly admit it can be the case, your
> >      introduction to this e-mail interestingly points exactly the
> >      opposite :-)
> 
> While I do understand Yann's concerns, however, I do think that this goes
> against buildroot's philosophy - "Buildroot: make Embedded Linux easy". 
> Right now it isn't easy for one to make customization to buildroot without
> modifying buildroot's source.
> 
> Yann - I would welcome you input into this discussion on mailing list 
> here.

Yes, as I said above, I would have expected companies (well, people at
companies) be stressed by projects deadlines, and that they would work
in BR2_EXTERNAL, and only try to upstream later, when it would be too
late (for them!) to have proper reviews, since they would be internally
committed to their changes in BR2_EXTERNAL, and we would not be able to
take their changes.

But if people use BR2_EXTERNAL as a fallback for anything that did not
make it upstream (by lack of time, or of interest), or for purely
internal stuff, then I don't see a reason for concern. All the better! :-)

> I'm probably beating this issue to death but I guess I'm very excited 
> about
> the possibilities that this patchset opens up for my company.

Not speaking for the others, but I for one am very exited by this
patchset too, if it makes people very exited about what it will allow
them to submit back upstream! ;-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 1/3] Makefile: factorize *config dependencies
  2013-09-08 13:15 ` [Buildroot] [PATCH 1/3] Makefile: factorize *config dependencies Thomas Petazzoni
  2013-09-11  2:06   ` rjbarnet at rockwellcollins.com
@ 2013-09-11 17:39   ` Yann E. MORIN
  1 sibling, 0 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-11 17:39 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2013-09-08 15:15 +0200, Thomas Petazzoni spake thusly:
> All of the *config targets have common dependencies. Currently, the
> only common dependency is the 'outputmakefile' target, but as we are
> going to add one more, it makes sense to factorize these common
> dependencies under the COMMON_CONFIG_DEPS variable.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

> ---
>  Makefile | 37 ++++++++++++++++++++-----------------
>  1 file changed, 20 insertions(+), 17 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 0d7476a..fc55b87 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -633,43 +633,46 @@ COMMON_CONFIG_ENV = \
>  	KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \
>  	BUILDROOT_CONFIG=$(BUILDROOT_CONFIG)
>  
> -xconfig: $(BUILD_DIR)/buildroot-config/qconf outputmakefile
> +COMMON_CONFIG_DEPS = \
> +	outputmakefile
> +
> +xconfig: $(BUILD_DIR)/buildroot-config/qconf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
>  
> -gconfig: $(BUILD_DIR)/buildroot-config/gconf outputmakefile
> +gconfig: $(BUILD_DIR)/buildroot-config/gconf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) srctree=$(TOPDIR) $< $(CONFIG_CONFIG_IN)
>  
> -menuconfig: $(BUILD_DIR)/buildroot-config/mconf outputmakefile
> +menuconfig: $(BUILD_DIR)/buildroot-config/mconf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
>  
> -nconfig: $(BUILD_DIR)/buildroot-config/nconf outputmakefile
> +nconfig: $(BUILD_DIR)/buildroot-config/nconf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
>  
> -config: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +config: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< $(CONFIG_CONFIG_IN)
>  
> -oldconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +oldconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< --oldconfig $(CONFIG_CONFIG_IN)
>  
> -randconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +randconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< --randconfig $(CONFIG_CONFIG_IN)
>  
> -allyesconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +allyesconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< --allyesconfig $(CONFIG_CONFIG_IN)
>  
> -allnoconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +allnoconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< --allnoconfig $(CONFIG_CONFIG_IN)
>  
> -randpackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +randpackageconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@grep -v BR2_PACKAGE_ $(BUILDROOT_CONFIG) > $(CONFIG_DIR)/.config.nopkg
>  	@grep '^config BR2_PACKAGE_' Config.in.legacy | \
> @@ -680,7 +683,7 @@ randpackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
>  		$< --randconfig $(CONFIG_CONFIG_IN)
>  	@rm -f $(CONFIG_DIR)/.config.nopkg
>  
> -allyespackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +allyespackageconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@grep -v BR2_PACKAGE_ $(BUILDROOT_CONFIG) > $(CONFIG_DIR)/.config.nopkg
>  	@grep '^config BR2_PACKAGE_' Config.in.legacy | \
> @@ -691,7 +694,7 @@ allyespackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
>  		$< --allyesconfig $(CONFIG_CONFIG_IN)
>  	@rm -f $(CONFIG_DIR)/.config.nopkg
>  
> -allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@grep -v BR2_PACKAGE_ $(BUILDROOT_CONFIG) > $(CONFIG_DIR)/.config.nopkg
>  	@$(COMMON_CONFIG_ENV) \
> @@ -699,23 +702,23 @@ allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
>  		$< --allnoconfig $(CONFIG_CONFIG_IN)
>  	@rm -f $(CONFIG_DIR)/.config.nopkg
>  
> -silentoldconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +silentoldconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	$(COMMON_CONFIG_ENV) $< --silentoldconfig $(CONFIG_CONFIG_IN)
>  
> -olddefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +olddefconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	$(COMMON_CONFIG_ENV) $< --olddefconfig $(CONFIG_CONFIG_IN)
>  
> -defconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +defconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) $(CONFIG_CONFIG_IN)
>  
> -%_defconfig: $(BUILD_DIR)/buildroot-config/conf $(TOPDIR)/configs/%_defconfig outputmakefile
> +%_defconfig: $(BUILD_DIR)/buildroot-config/conf $(TOPDIR)/configs/%_defconfig $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< --defconfig=$(TOPDIR)/configs/$@ $(CONFIG_CONFIG_IN)
>  
> -savedefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
> +savedefconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>  	@mkdir -p $(BUILD_DIR)/buildroot-config
>  	@$(COMMON_CONFIG_ENV) $< \
>  		--savedefconfig=$(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig) \
> -- 
> 1.8.1.2
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-11 17:27       ` Yann E. MORIN
@ 2013-09-12  7:54         ` Thomas De Schampheleire
  2013-09-12 18:21           ` Thomas Petazzoni
  2013-09-12 21:50           ` Yann E. MORIN
  2013-09-12 18:18         ` Thomas Petazzoni
  1 sibling, 2 replies; 84+ messages in thread
From: Thomas De Schampheleire @ 2013-09-12  7:54 UTC (permalink / raw)
  To: buildroot

Hi,

On Wed, Sep 11, 2013 at 7:27 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Ryan, Thomas, All,
>
[..]
>
> Yes, as I said above, I would have expected companies (well, people at
> companies) be stressed by projects deadlines, and that they would work
> in BR2_EXTERNAL, and only try to upstream later, when it would be too
> late (for them!) to have proper reviews, since they would be internally
> committed to their changes in BR2_EXTERNAL, and we would not be able to
> take their changes.
>
> But if people use BR2_EXTERNAL as a fallback for anything that did not
> make it upstream (by lack of time, or of interest), or for purely
> internal stuff, then I don't see a reason for concern. All the better! :-)
>

Not to ruin the atmosphere, but even though Ryan and his colleagues
may be using BR2_EXTERNAL 'the good way', ultimately helping the
buildroot project with their contributions, the danger of others not
doing that is still real. Of course, _not_ contributing changes made
in a company project was also possible previously, without
BR2_EXTERNAL, so this is no reason to block the patchset.

In case it may be useful to others: here is how I am using buildroot
in a company environment. We are not directly tracking mainline, but
base ourselves on release tarballs. We have one Mercurial repository
in which each of these release tarballs are extracted (the pristine
repository). In this repository, no changes are made other than the
extracting. Since these are release tarballs, there is obviously no
information about the individual commits made in buildroot git, but
this is generally not a problem. In case we do want to know who made a
particular change, we can still look that up in buildroot git.
A second repository is cloned from this first one, and does contain
our own changes. This two-repository approach is similar to having a
pristine branch and a master branch for development, it's a matter of
choice.
Our changes are mainly in package/company, board/company and configs.
This makes updating to a new buildroot release pretty straightforward:
first the pristine repo is updated with a new tarball. Then, these
changes are pulled into the development repo, and merged. Most merges
will be trivial because most changes are in separate files.
If necessary, changes made upstream are imported as separate commits
on top of the releases, but this happens only occasionally.

Of course, we do sometimes make changes in standard buildroot files.
These can be new non-proprietary packages, or other changes throughout
the tree. We take care to keep this upstreamable, and do effectively
upstream when/where possible. It are these files that can pose a merge
conflict, because for example the implementation originally committed
is slightly different from the one accepted upstream. Or maybe, the
patch has not yet been accepted upstream when a new release is taken
in.
The upstreaming work is currently done by one person (me) and this is
clearly the weak point. If I stop paying attention to upstreaming, or
to keeping the changes we make upstreamable, the delta between our
development repo and mainline buildroot becomes so large that it is a
nightmare to keep up with newer releases.

In our overall build process, at some point the buildroot repo will be
cloned at the right revision, the relevant config set, and 'make' will
be run in buildroot. Afterwards, the result files will be collected
from output/images and post-processed into the right format to put on
our boards. One could consider buildroot here as a backend, as Yann
referred to.

Upstreaming is also done with Mercurial: I convert buildroot git to hg
using the hg-git extension. Patches are directly sent from Mercurial
through the patchbomb extension. The only git command I execute is
'git pull' in the git repo, and possible 'git checkout next' during
the time there is a master and active next branch.


Best regards,
Thomas

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-11 17:27       ` Yann E. MORIN
  2013-09-12  7:54         ` Thomas De Schampheleire
@ 2013-09-12 18:18         ` Thomas Petazzoni
  2013-09-12 22:24           ` Yann E. MORIN
  1 sibling, 1 reply; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-12 18:18 UTC (permalink / raw)
  To: buildroot

Dear Yann E. MORIN,

On Wed, 11 Sep 2013 19:27:09 +0200, Yann E. MORIN wrote:

> > That just becomes nasty and doesn't really easily allow for different 
> > configurations where you don't always want all your propriety packages
> > to build. Also it doesn't make your propriety packages visible within
> > the buildroot menuconfig. The other nice feature is the is that company's
> > configs are automatically pulled in a separate area.
> 
> The way *I* see this is that Buildroot is not the main /frontend/ of the
> build system, but rather a backend. That's the way I use it: I have a
> kind of /upper-layer/ build system that uses Buildroot as a kind of
> /backend/.

I think that's one way of using it, but that's not necessarily the only
way we should support. In all the Buildroot based projects I've done,
I've also tried to make Buildroot directly be the front-end, and
include whatever build logic is needed within Buildroot.

I can only remember of one project in which I did not do that, and it
was because the customer had already written his build logic using
Buildroot as a back-end.

> Yes, as I said above, I would have expected companies (well, people at
> companies) be stressed by projects deadlines, and that they would work
> in BR2_EXTERNAL, and only try to upstream later, when it would be too
> late (for them!) to have proper reviews, since they would be internally
> committed to their changes in BR2_EXTERNAL, and we would not be able to
> take their changes.
> 
> But if people use BR2_EXTERNAL as a fallback for anything that did not
> make it upstream (by lack of time, or of interest), or for purely
> internal stuff, then I don't see a reason for concern. All the better! :-)

If companies are in a hurry, they are not going to upstream anything
anyway, so we're not loosing something. Today, without BR2_EXTERNAL,
companies can already fork Buildroot, do a massive amount of changes
directly within Buildroot, and not upstream anything at all. Therefore,
adding BR2_EXTERNAL is not going to make things worse.

I believe it could potentially make things better. It might allow
companies to separate what they consider "company-specific" in the
BR2_EXTERNAL directory, while still making the Buildroot core changes,
or open-source package additions in the main Buildroot tree, and submit
those changes upstream. It allows them to keep cleanly separated the
changes that will never be upstreamed because it doesn't make sense
(specific board support, highly specific and proprietary packages) from
the things that might be upstreamed if the submission effort is made.

Best regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12  7:54         ` Thomas De Schampheleire
@ 2013-09-12 18:21           ` Thomas Petazzoni
  2013-09-12 18:25             ` ANDY KENNEDY
                               ` (2 more replies)
  2013-09-12 21:50           ` Yann E. MORIN
  1 sibling, 3 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-12 18:21 UTC (permalink / raw)
  To: buildroot

Dear Thomas De Schampheleire,

On Thu, 12 Sep 2013 09:54:56 +0200, Thomas De Schampheleire wrote:

> > Yes, as I said above, I would have expected companies (well, people at
> > companies) be stressed by projects deadlines, and that they would work
> > in BR2_EXTERNAL, and only try to upstream later, when it would be too
> > late (for them!) to have proper reviews, since they would be internally
> > committed to their changes in BR2_EXTERNAL, and we would not be able to
> > take their changes.
> >
> > But if people use BR2_EXTERNAL as a fallback for anything that did not
> > make it upstream (by lack of time, or of interest), or for purely
> > internal stuff, then I don't see a reason for concern. All the better! :-)
> >
> 
> Not to ruin the atmosphere, but even though Ryan and his colleagues
> may be using BR2_EXTERNAL 'the good way', ultimately helping the
> buildroot project with their contributions, the danger of others not
> doing that is still real. Of course, _not_ contributing changes made
> in a company project was also possible previously, without
> BR2_EXTERNAL, so this is no reason to block the patchset.

Yes, that's what I believe: companies and people are forking Buildroot
nowadays. As I highlighted in my reply to Yann's e-mail, BR2_EXTERNAL
may in fact encourage companies in separating their specific changes
from the changes that could potentially be upstreamed, and therefore
encourage upstream.

I really don't think BR2_EXTERNAL is going to make things worse in
terms of upstreaming.

> In case it may be useful to others: here is how I am using buildroot
> in a company environment. We are not directly tracking mainline, but
> base ourselves on release tarballs. We have one Mercurial repository
> in which each of these release tarballs are extracted (the pristine
> repository). In this repository, no changes are made other than the
> extracting. Since these are release tarballs, there is obviously no
> information about the individual commits made in buildroot git, but
> this is generally not a problem. In case we do want to know who made a
> particular change, we can still look that up in buildroot git.
> A second repository is cloned from this first one, and does contain
> our own changes. This two-repository approach is similar to having a
> pristine branch and a master branch for development, it's a matter of
> choice.
> Our changes are mainly in package/company, board/company and configs.
> This makes updating to a new buildroot release pretty straightforward:
> first the pristine repo is updated with a new tarball. Then, these
> changes are pulled into the development repo, and merged. Most merges
> will be trivial because most changes are in separate files.
> If necessary, changes made upstream are imported as separate commits
> on top of the releases, but this happens only occasionally.
> 
> Of course, we do sometimes make changes in standard buildroot files.
> These can be new non-proprietary packages, or other changes throughout
> the tree. We take care to keep this upstreamable, and do effectively
> upstream when/where possible. It are these files that can pose a merge
> conflict, because for example the implementation originally committed
> is slightly different from the one accepted upstream. Or maybe, the
> patch has not yet been accepted upstream when a new release is taken
> in.
> The upstreaming work is currently done by one person (me) and this is
> clearly the weak point. If I stop paying attention to upstreaming, or
> to keeping the changes we make upstreamable, the delta between our
> development repo and mainline buildroot becomes so large that it is a
> nightmare to keep up with newer releases.

Do you think there is something we can do at the Buildroot level to
ease this process?

> In our overall build process, at some point the buildroot repo will be
> cloned at the right revision, the relevant config set, and 'make' will
> be run in buildroot. Afterwards, the result files will be collected
> from output/images and post-processed into the right format to put on
> our boards. One could consider buildroot here as a backend, as Yann
> referred to.
> 
> Upstreaming is also done with Mercurial: I convert buildroot git to hg
> using the hg-git extension. Patches are directly sent from Mercurial
> through the patchbomb extension. The only git command I execute is
> 'git pull' in the git repo, and possible 'git checkout next' during
> the time there is a master and active next branch.

Thanks a lot for this write-up. I think we should keep it somewhere in
a section of the manual.

Best regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 18:21           ` Thomas Petazzoni
@ 2013-09-12 18:25             ` ANDY KENNEDY
  2013-09-12 18:33               ` Thomas Petazzoni
  2013-09-12 21:51             ` Yann E. MORIN
  2013-09-13  7:35             ` Thomas De Schampheleire
  2 siblings, 1 reply; 84+ messages in thread
From: ANDY KENNEDY @ 2013-09-12 18:25 UTC (permalink / raw)
  To: buildroot

> -----Original Message-----
> From: buildroot-bounces at busybox.net [mailto:buildroot-bounces at busybox.net] On Behalf Of Thomas
> Petazzoni
> Sent: Thursday, September 12, 2013 1:22 PM
> To: Thomas De Schampheleire
> Cc: buildroot at uclibc.org; Yann E. MORIN
> Subject: Re: [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
> 
> Dear Thomas De Schampheleire,
> 
> On Thu, 12 Sep 2013 09:54:56 +0200, Thomas De Schampheleire wrote:
> 
> > > Yes, as I said above, I would have expected companies (well, people at
> > > companies) be stressed by projects deadlines, and that they would work
> > > in BR2_EXTERNAL, and only try to upstream later, when it would be too
> > > late (for them!) to have proper reviews, since they would be internally
> > > committed to their changes in BR2_EXTERNAL, and we would not be able to
> > > take their changes.
> > >
> > > But if people use BR2_EXTERNAL as a fallback for anything that did not
> > > make it upstream (by lack of time, or of interest), or for purely
> > > internal stuff, then I don't see a reason for concern. All the better! :-)
> > >
> >
> > Not to ruin the atmosphere, but even though Ryan and his colleagues
> > may be using BR2_EXTERNAL 'the good way', ultimately helping the
> > buildroot project with their contributions, the danger of others not
> > doing that is still real. Of course, _not_ contributing changes made
> > in a company project was also possible previously, without
> > BR2_EXTERNAL, so this is no reason to block the patchset.
> 
> Yes, that's what I believe: companies and people are forking Buildroot
> nowadays. As I highlighted in my reply to Yann's e-mail, BR2_EXTERNAL
> may in fact encourage companies in separating their specific changes
> from the changes that could potentially be upstreamed, and therefore
> encourage upstream.
> 
> I really don't think BR2_EXTERNAL is going to make things worse in
> terms of upstreaming.

<snip>

This sounds much like the way Linux does things for the IP related
drivers.  Is that the intent we are going for (personally, I think this
is a GREAT idea, as it allows companies to have IP related widgets in
BuildRoot without the fear of being REQUIRED to push back their secret
sauce)?

If that is what you intend, you have my vote!

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 18:25             ` ANDY KENNEDY
@ 2013-09-12 18:33               ` Thomas Petazzoni
  2013-09-12 18:44                 ` ANDY KENNEDY
                                   ` (2 more replies)
  0 siblings, 3 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-12 18:33 UTC (permalink / raw)
  To: buildroot

Dear ANDY KENNEDY,

On Thu, 12 Sep 2013 18:25:40 +0000, ANDY KENNEDY wrote:

> This sounds much like the way Linux does things for the IP related
> drivers.  Is that the intent we are going for (personally, I think this
> is a GREAT idea, as it allows companies to have IP related widgets in
> BuildRoot without the fear of being REQUIRED to push back their secret
> sauce)?
> 
> If that is what you intend, you have my vote!

I am not sure what you mean by "IP related drivers". Do you mean
proprietary drivers?

It is true that the BR2_EXTERNAL thing raises a licensing question:
should the BR2_EXTERNAL contents also be released under GPLv2, like the
rest of Buildroot? Do we really want the root filesystem overlays and
other highly project-specific contents be released under GPLv2 ?

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 18:33               ` Thomas Petazzoni
@ 2013-09-12 18:44                 ` ANDY KENNEDY
  2013-09-12 22:04                 ` Arnout Vandecappelle
  2013-09-12 22:07                 ` Yann E. MORIN
  2 siblings, 0 replies; 84+ messages in thread
From: ANDY KENNEDY @ 2013-09-12 18:44 UTC (permalink / raw)
  To: buildroot

> -----Original Message-----
> From: Thomas Petazzoni [mailto:thomas.petazzoni at free-electrons.com]
> Sent: Thursday, September 12, 2013 1:34 PM
> To: ANDY KENNEDY
> Cc: Thomas De Schampheleire; buildroot at uclibc.org; Yann E. MORIN
> Subject: Re: [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
> 
> Dear ANDY KENNEDY,
> 
> On Thu, 12 Sep 2013 18:25:40 +0000, ANDY KENNEDY wrote:
> 
> > This sounds much like the way Linux does things for the IP related
> > drivers.  Is that the intent we are going for (personally, I think this
> > is a GREAT idea, as it allows companies to have IP related widgets in
> > BuildRoot without the fear of being REQUIRED to push back their secret
> > sauce)?
> >
> > If that is what you intend, you have my vote!
> 
> I am not sure what you mean by "IP related drivers". Do you mean
> proprietary drivers?

Sorry, I thought that was a universal acronym.  Yes, IP is
Intellectual Property.

> 
> It is true that the BR2_EXTERNAL thing raises a licensing question:
> should the BR2_EXTERNAL contents also be released under GPLv2, like the
> rest of Buildroot? Do we really want the root filesystem overlays and
> other highly project-specific contents be released under GPLv2 ?

Whether one uses BuildRoot as their build system, I would think, would
not be a concern of those of us who work on BuildRoot.  Am I the only
one that feels this way?  I see Linux, and derivations of it, in this
case BuildRoot, as an ends to a means.  I hold the opinion that, if I
have added some minor tool like htop to the RFS, and someone can then
make a butt-load of money by my work then KUDOS TO THEM and shame on me
for not thinking of it in the first place.

I know that there are those that believe that if I walked near a person
who was thinking of GPL related code and I get an idea (not necessarily
related to what the individual was doing), that this idea should then be
GPL code as well (this seems to be the intent of GPLv3, though I stretch
the scenario somewhat).  I don't hold that view.  If I release something
back to BuildRoot, I'm doing so in the spirit in which I used BuildRoot
to begin with:  I am giving back to a community of friends that help me
make money.  If I can help you make money in return, I am happy to have
helped you.

Am I alone in this thinking?  I hope not.

Andy

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-08 13:15 ` [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL Thomas Petazzoni
  2013-09-11  2:03   ` rjbarnet at rockwellcollins.com
  2013-09-11  2:07   ` rjbarnet at rockwellcollins.com
@ 2013-09-12 21:04   ` Arnout Vandecappelle
  2013-09-13  3:48     ` Thomas Petazzoni
       [not found]   ` <CAC2S8kiHUwNFprvvYd85UEGjDJhEX0Jgtb4e7Pd1vwwFGF7m_w@mail.gmail.com>
  3 siblings, 1 reply; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-12 21:04 UTC (permalink / raw)
  To: buildroot

  Hi Thomas,

  It's funny how people can change their mind...

  I've put Tzu-Jung Lee in CC, who wrote something similar a while ago.

On 08/09/13 15:15, Thomas Petazzoni wrote:
> This commit adds support for an environment variable named
> BR2_EXTERNAL, which the user can point to a directory outside of
> Buildroot that contains root filesystem overlays, kernel configuration
> files, package recipes, defconfigs, etc. It allows users to keep their
> specific Buildroot customizations outside of the Buildroot tree.
>
> BR2_EXTERNAL allows:

  I would split this into three separate patches for the three separate 
features. I think (1) and (3) are a lot less controversial than (2).

>
>   (1) To use $(BR2_EXTERNAL) in all Buildroot configuration options
>       that take a path as argument. This allows to reference a root
>       filesystem overlay, a kernel configuration file, a Barebox
>       configuration file located in the BR2_EXTERNAL directory.

  Note to list: this was already possible before, of course, the 
difference is that now this path will be stored in the .config.

  There is one small issue with this: I don't think that all the use 
cases support relative paths. Ideally, the Makefile should be smart 
enough to prepend $(TOPDIR) if it doesn't start with a /.


>   (2) To store external package or makefile logic, since the
>       BR2_EXTERNAL/external.mk file is automatically included by the
>       Makefile logic, and the BR2_EXTERNAL/Config.in file is
>       automatically included, and appears in the top-level menu. The
>       typical usage would be to create a BR2_EXTERNAL/package/
>       directory to contain package definitions.

  I'm not really convinced by the principle. The external.mk is exactly 
the same as the local override .mk; the Config.in appears at the very end 
of the top-level menu. Instead, I think we should enforce the buildroot 
hierarchy in the external dir, i.e.

source <path-to-external-dir>/package/Config.in

at the top of package/Config.in, and

-include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk))

in the top-level Makefile.

  Of course, that Config.in thing is a lot trickier because it's almost 
impossible to refer to the output directory from the Config.in.

>   (3) To store defconfig files under BR2_EXTERNAL/configs/. They will
>       be visible in 'make help' and usable through 'make
>       <someboard>_defconfig'.

  That's a great idea.


> In terms of implementation, it is relatively straightforward:
>
>   * A BR2_EXTERNAL kconfig variable is added, which is set to the value
>     of the BR2_EXTERNAL environment variable.
>
>   * The top-level Config.in file given to kconfig is no longer the main
>     Config.in in the Buildroot sources, but instead a toplevel.in file
>     generated in the output directory, which includes the top-level
>     Buildroot Config.in file and the BR2_EXTERNAL/Config.in file if
>     provided. Since is needed because the kconfig 'source' statement
>     errors out if the included file doesn't exist. I have written
>     patches that add support for an 'isource' statement in kconfig
>     (that silently ignores the inclusion if the pointed file doesn't
>     exist), but keeping feature patches against kconfig doesn't seem
>     like a good idea.

  It took me a while to realize that that was _not_ the approach you had 
taken...

>     Note that the "mainmenu" statement is part of
>     this generated file, because it must be the first statement seen in
>     the toplevel Config.in file passed to kconfig.
>
>   * The BR2_EXTERNAL/external.mk makefile gets included.
>
>   * The BR2_EXTERNAL environment variable gets passed in the
>     environment of kconfig and when executing the kconfiglib-based
>     Python script that updates the manual, so that the references to
>     the BR2_EXTERNAL variable within Config.in files can be resolved.

  So this means that the external packages will appear in the package 
list in the manual? I'm not sure if that is what you typically want.


>   * The 'make help' and 'make %_defconfig' targets are updated to take
>     into account the defconfig files stored under
>     BR2_EXTERNAL/configs/.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>   Config.in             |  6 ++++--
>   Makefile              | 29 +++++++++++++++++++++++++----
>   docs/manual/manual.mk |  2 +-
>   3 files changed, 30 insertions(+), 7 deletions(-)
>
> diff --git a/Config.in b/Config.in
> index cb246a4..7e253c6 100644
> --- a/Config.in
> +++ b/Config.in
> @@ -1,7 +1,5 @@
>   #
>
> -mainmenu "Buildroot $BR2_VERSION Configuration"
> -
>   config BR2_HAVE_DOT_CONFIG
>   	bool
>   	default y
> @@ -14,6 +12,10 @@ config BR2_HOSTARCH
>   	string
>   	option env="HOSTARCH"
>
> +config BR2_EXTERNAL
> +	string
> +	option env="BR2_EXTERNAL"
> +
>   # Hidden boolean selected by pre-built packages for x86, when they
>   # need to run on x86-64 machines (example: pre-built external
>   # toolchains, binary tools like SAM-BA, etc.).
> diff --git a/Makefile b/Makefile
> index fc55b87..1014399 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -47,7 +47,6 @@ export HOSTARCH := $(shell uname -m | \
>
>   # absolute path
>   TOPDIR:=$(shell pwd)
> -CONFIG_CONFIG_IN=Config.in
>   CONFIG=support/kconfig
>   DATE:=$(shell date +%Y%m%d)
>
> @@ -339,6 +338,10 @@ include boot/common.mk
>   include linux/linux.mk
>   include system/system.mk
>
> +ifneq ($(BR2_EXTERNAL),)
> +include $(BR2_EXTERNAL)/external.mk
> +endif
> +
>   TARGETS+=target-finalize
>
>   ifeq ($(BR2_ENABLE_LOCALE_PURGE),y)
> @@ -622,6 +625,18 @@ $(BUILD_DIR)/buildroot-config/%onf:
>   	mkdir -p $(@D)/lxdialog
>   	$(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)" obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
>
> +CONFIG_CONFIG_IN=$(BUILD_DIR)/buildroot-config/toplevel.in
> +
> +# This is intentionally a virtual target so that the file gets
> +# regenerated everytime this target is invoked.
> +toplevelin-generate:

  I guess you mean phony target. You should also add
.PHONY: toplevelin-generate
for the (unlikely) case that someone creates a file with this name.

  BTW I don't like the target's name. generate-config-dot-in maybe?

> +	mkdir -p $(dir $(CONFIG_CONFIG_IN))
> +	echo "mainmenu \"Buildroot $$BR2_VERSION Configuration\"" > $(CONFIG_CONFIG_IN)
> +	echo "source \"Config.in\"" >> $(CONFIG_CONFIG_IN)
> +ifneq ($(BR2_EXTERNAL),)
> +	echo "source \"$$BR2_EXTERNAL/Config.in\"" >> $(CONFIG_CONFIG_IN)

  $(BR2_EXTERNAL) would be a lot more readable than $$BR2_EXTERNAL IMHO. 
Then you can also put it in single quotes and remove the \.

> +endif
> +
>   DEFCONFIG = $(call qstrip,$(BR2_DEFCONFIG))
>
>   # We don't want to fully expand BR2_DEFCONFIG here, so Kconfig will
> @@ -631,10 +646,12 @@ COMMON_CONFIG_ENV = \
>   	KCONFIG_AUTOCONFIG=$(BUILD_DIR)/buildroot-config/auto.conf \
>   	KCONFIG_AUTOHEADER=$(BUILD_DIR)/buildroot-config/autoconf.h \
>   	KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \
> -	BUILDROOT_CONFIG=$(BUILDROOT_CONFIG)
> +	BUILDROOT_CONFIG=$(BUILDROOT_CONFIG) \
> +	BR2_EXTERNAL=$(BR2_EXTERNAL)

  There is one tricky issue:

cd ~/src/myproject/output
make -C ~/src/buildroot O=$PWD menuconfig
Hack hack hack
Hm, I need an external dir...
BR2_EXTERNAL=.. make menuconfig
=> BR2_EXTERNAL will point to ~/src instead of ~/src/myproject

  I.e., it doesn't work well for relative paths.

  I don't know if there is an elegant way to solve that.


>   COMMON_CONFIG_DEPS = \
> -	outputmakefile
> +	outputmakefile \
> +	toplevelin-generate
>
>   xconfig: $(BUILD_DIR)/buildroot-config/qconf $(COMMON_CONFIG_DEPS)
>   	@mkdir -p $(BUILD_DIR)/buildroot-config
> @@ -718,6 +735,10 @@ defconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>   	@mkdir -p $(BUILD_DIR)/buildroot-config
>   	@$(COMMON_CONFIG_ENV) $< --defconfig=$(TOPDIR)/configs/$@ $(CONFIG_CONFIG_IN)
>
> +%_defconfig: $(BUILD_DIR)/buildroot-config/conf $(BR2_EXTERNAL)/configs/%_defconfig $(COMMON_CONFIG_DEPS)
> +	@mkdir -p $(BUILD_DIR)/buildroot-config
> +	@$(COMMON_CONFIG_ENV) $< --defconfig=$(BR2_EXTERNAL)/configs/$@ $(CONFIG_CONFIG_IN)

  This should be in a
ifneq ($(BR2_EXTERNAL),)


  Regards,
  Arnout

> +
>   savedefconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>   	@mkdir -p $(BUILD_DIR)/buildroot-config
>   	@$(COMMON_CONFIG_ENV) $< \
> @@ -829,7 +850,7 @@ endif
>   	@echo '  make V=0|1             - 0 => quiet build (default), 1 => verbose build'
>   	@echo '  make O=dir             - Locate all output files in "dir", including .config'
>   	@echo
> -	@$(foreach b, $(sort $(notdir $(wildcard $(TOPDIR)/configs/*_defconfig))), \
> +	@$(foreach b, $(sort $(notdir $(wildcard $(TOPDIR)/configs/*_defconfig $(BR2_EXTERNAL)/configs/*_defconfig))), \
>   	  printf "  %-35s - Build for %s\\n" $(b) $(b:_defconfig=);)
>   	@echo
>   	@echo 'See docs/README, or generate the Buildroot manual for further details'
> diff --git a/docs/manual/manual.mk b/docs/manual/manual.mk
> index 4906bc8..8e0ab30 100644
> --- a/docs/manual/manual.mk
> +++ b/docs/manual/manual.mk
> @@ -1,6 +1,6 @@
>   manual-update-lists:
>   	$(Q)$(call MESSAGE,"Updating the manual lists...")
> -	$(Q)BR2_DEFCONFIG="" TOPDIR=$(TOPDIR) O=$(O)/docs/manual/.build \
> +	$(Q)BR2_DEFCONFIG="" BR2_EXTERNAL="$(BR2_EXTERNAL)" TOPDIR=$(TOPDIR) O=$(O)/docs/manual/.build \
>   		$(TOPDIR)/support/scripts/gen-manual-lists.py
>
>   ################################################################################
>


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-11  2:03   ` rjbarnet at rockwellcollins.com
  2013-09-11 17:03     ` Yann E. MORIN
@ 2013-09-12 21:05     ` Arnout Vandecappelle
  2013-09-12 21:30       ` Ryan Barnett
  1 sibling, 1 reply; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-12 21:05 UTC (permalink / raw)
  To: buildroot

On 11/09/13 04:03, rjbarnet at rockwellcollins.com wrote:
> Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on
> 09/08/2013 08:15:28 AM:
>
>  >
>  > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
>  > ---
>  >  Config.in   |  6 ++++--
>  >  Makefile    | 29 +++++++++++++++++++++++++----
>  >  docs/manual/manual.mk |  2 +-
>
> One idea that I have, is for the make file that is genreated for the an
> external output directory, if we could preserve the the value of
> BR2_EXTERNAL
> as follows.

  Thomas's patch already does that, because BR2_EXTERNAL is stored in the 
config file.

> I don't think my logic is fully there but there is more of a
> sudo implementation:
>
> diff --git a/support/scripts/mkmakefile b/support/scripts/mkmakefile
> --- a/support/scripts/mkmakefile
> +++ b/support/scripts/mkmakefile
> @@ -27,6 +27,7 @@ makedir := \$(dir \$(call lastword,\$(MAKEFILE_LIST)))
>
>   MAKEARGS := -C $1
>   MAKEARGS += O=\$(if \$(patsubst
> /%,,\$(makedir)),\$(CURDIR)/)\$(patsubst %/,%,\$(makedir))
> +MAKEARGS += BR2_EXTERNAL=\$(realpath \$(BR2_EXTERNAL))
>
>   MAKEFLAGS += --no-print-directory
>
> Again this is only a suggestion but otherwise I'll ack the patchset.
>
> Thanks,
> -Ryan
>
> -------------------------------------------------------------------------
> 	*Ryan J Barnett* / Software Engineer / Platform SW
> MS 137-157, 855 35th St NE, Cedar Rapids, IA, 52498-3161, US
> Phone: 319-263-3880 / VPN: 263-3880 _
> __rjbarnet at rockwellcollins.com_ <mailto:rjbarnet@rockwellcollins.com>_
> __www.rockwellcollins.com_ <http://www.rockwellcollins.com/>
>
>
>
>
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
>


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-12 21:05     ` Arnout Vandecappelle
@ 2013-09-12 21:30       ` Ryan Barnett
  2013-09-12 21:41         ` Arnout Vandecappelle
  0 siblings, 1 reply; 84+ messages in thread
From: Ryan Barnett @ 2013-09-12 21:30 UTC (permalink / raw)
  To: buildroot

Arnout Vandecappelle <arnout@mind.be> wrote on 09/12/2013 04:05:18 PM:

> On 11/09/13 04:03, rjbarnet at rockwellcollins.com wrote:
> > Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on
> > 09/08/2013 08:15:28 AM:
> >
> >  >
> >  > Signed-off-by: Thomas Petazzoni 
<thomas.petazzoni@free-electrons.com>
> >  > ---
> >  >  Config.in   |  6 ++++--
> >  >  Makefile    | 29 +++++++++++++++++++++++++----
> >  >  docs/manual/manual.mk |  2 +-
> >
> > One idea that I have, is for the make file that is genreated for the 
an
> > external output directory, if we could preserve the the value of
> > BR2_EXTERNAL
> > as follows.
> 
>   Thomas's patch already does that, because BR2_EXTERNAL is stored in 
the 
> config file.
> 

I don't believe it gets stored in the config since Config.in pulls
the variable in from the shell's or make's environment. 

+config BR2_EXTERNAL
+       string
+       option env="BR2_EXTERNAL"

In order to utilize the BR2_EXTERNAL feature I must have BR2_EXTERNAL
either exported into my environment or be called as 

'make BR2_EXTERNAL=/some/path <target>'


When utilizing the BR2_EXTERNAL I usual want to use some defconfig from
my BR2_EXTERNAL so it adding it the makefile that is generated in your 
build directory when specifying O= would be extermely useful as that 
way I can switch shells and my definition of BR2_EXTERNAL would still 
be present.

'make O=/build/path BR2_EXTERNAL=/path/to/external defconfig'

> > I don't think my logic is fully there but there is more of a
> > sudo implementation:
> >
> > diff --git a/support/scripts/mkmakefile b/support/scripts/mkmakefile
> > --- a/support/scripts/mkmakefile
> > +++ b/support/scripts/mkmakefile
> > @@ -27,6 +27,7 @@ makedir := \$(dir \$(call 
lastword,\$(MAKEFILE_LIST)))
> >
> >   MAKEARGS := -C $1
> >   MAKEARGS += O=\$(if \$(patsubst
> > /%,,\$(makedir)),\$(CURDIR)/)\$(patsubst %/,%,\$(makedir))
> > +MAKEARGS += BR2_EXTERNAL=\$(realpath \$(BR2_EXTERNAL))
> >
> >   MAKEFLAGS += --no-print-directory
> >
> > Again this is only a suggestion but otherwise I'll ack the patchset.
> >

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130912/e06f840b/attachment.html>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-12 21:30       ` Ryan Barnett
@ 2013-09-12 21:41         ` Arnout Vandecappelle
  2013-09-12 21:51           ` Ryan Barnett
  0 siblings, 1 reply; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-12 21:41 UTC (permalink / raw)
  To: buildroot

On 12/09/13 23:30, Ryan Barnett wrote:
> Arnout Vandecappelle <arnout@mind.be> wrote on 09/12/2013 04:05:18 PM:
>
>  > On 11/09/13 04:03, rjbarnet at rockwellcollins.com wrote:
>  > > Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on
>  > > 09/08/2013 08:15:28 AM:
>  > >
>  > >  >
>  > >  > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
>  > >  > ---
>  > >  >  Config.in   |  6 ++++--
>  > >  >  Makefile    | 29 +++++++++++++++++++++++++----
>  > >  >  docs/manual/manual.mk |  2 +-
>  > >
>  > > One idea that I have, is for the make file that is genreated for the an
>  > > external output directory, if we could preserve the the value of
>  > > BR2_EXTERNAL
>  > > as follows.
>  >
>  >   Thomas's patch already does that, because BR2_EXTERNAL is stored in the
>  > config file.
>  >
>
> I don't believe it gets stored in the config since Config.in pulls
> the variable in from the shell's or make's environment.
>
> +config BR2_EXTERNAL
> +       string
> +       option env="BR2_EXTERNAL"
>
> In order to utilize the BR2_EXTERNAL feature I must have BR2_EXTERNAL
> either exported into my environment or be called as

  The Makefile exports it in the environment of the Kconfig targets. So 
once it is in the .config, it will stay there. Try it and you'll see :-)

>
> 'make BR2_EXTERNAL=/some/path <target>'
>
>
> When utilizing the BR2_EXTERNAL I usual want to use some defconfig from
> my BR2_EXTERNAL so it adding it the makefile that is generated in your
> build directory when specifying O= would be extermely useful as that
> way I can switch shells and my definition of BR2_EXTERNAL would still
> be present.
>
> 'make O=/build/path BR2_EXTERNAL=/path/to/external defconfig'

  In this particular case, you're not using the Makefile in the output 
dir but only in the buildroot dir so it's not relevant.

  The only case where it would be relevant is when you have an existing 
output directory, you remove the .config first, and then you do a
make foo_defconfig. Seems a bit an unlikely scenario.

  Regards,
  Arnout

>
>  > > I don't think my logic is fully there but there is more of a
>  > > sudo implementation:
>  > >
>  > > diff --git a/support/scripts/mkmakefile b/support/scripts/mkmakefile
>  > > --- a/support/scripts/mkmakefile
>  > > +++ b/support/scripts/mkmakefile
>  > > @@ -27,6 +27,7 @@ makedir := \$(dir \$(call lastword,\$(MAKEFILE_LIST)))
>  > >
>  > >   MAKEARGS := -C $1
>  > >   MAKEARGS += O=\$(if \$(patsubst
>  > > /%,,\$(makedir)),\$(CURDIR)/)\$(patsubst %/,%,\$(makedir))
>  > > +MAKEARGS += BR2_EXTERNAL=\$(realpath \$(BR2_EXTERNAL))
>  > >
>  > >   MAKEFLAGS += --no-print-directory
>  > >
>  > > Again this is only a suggestion but otherwise I'll ack the patchset.
>  > >
>


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 3/3] docs/manual: add explanations about BR2_EXTERNAL
  2013-09-08 13:15 ` [Buildroot] [PATCH 3/3] docs/manual: add explanations about BR2_EXTERNAL Thomas Petazzoni
  2013-09-11  2:09   ` rjbarnet at rockwellcollins.com
@ 2013-09-12 21:46   ` Arnout Vandecappelle
  2013-09-13  6:53     ` Thomas Petazzoni
  1 sibling, 1 reply; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-12 21:46 UTC (permalink / raw)
  To: buildroot

On 08/09/13 15:15, Thomas Petazzoni wrote:
> This commit updates the manual to add details on how to use the
> BR2_EXTERNAL feature.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>   docs/manual/customize-outside-br.txt | 110 +++++++++++++++++++++++++++++++++++
>   docs/manual/customize.txt            |   2 +
>   2 files changed, 112 insertions(+)
>   create mode 100644 docs/manual/customize-outside-br.txt
>
> diff --git a/docs/manual/customize-outside-br.txt b/docs/manual/customize-outside-br.txt
> new file mode 100644
> index 0000000..81a8911
> --- /dev/null
> +++ b/docs/manual/customize-outside-br.txt
> @@ -0,0 +1,110 @@
> +// -*- mode:doc -*- ;
> +
> +[[outside-br-custom]]
> +Keeping customization outside Buildroot
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +While the Buildroot community recommends and encourages upstreaming to
> +the official Buildroot version the packages and boards support that
> +are written by developers, it is sometimes not possible or desirable,
> +due to these packages or boards being highly specific or proprietary.
> +
> +In this case, Buildroot users are offered two choices:
> +
> + * They can add their packages, board support and configuration files
> +   directly within the Buildroot tree, and maintain them by using
> +   branches in a version control system.
> +
> + * They can use the +BR2_EXTERNAL+ mechanism, which allows to keep
> +   package recipes, board support and configuration files outside of
> +   the Buildroot tree, while still having them nicely integrated in
> +   the build logic. The following paragraphs give details on how to
> +   use +BR2_EXTERNAL+.
> +
> ++BR2_EXTERNAL+ is an environment variable that one can use to point to
> +a directory that contains Buildroot customizations. This environment
> +variable must be passed everytime a Buildroot +make+ command is
> +invoked, be it at configuration time (+make menuconfig+, +make
> +xconfig+, etc.), at build time (+make+) or any other Buildroot command
> +(+make source+, +make legal-info+, etc.).

  Hang on... It's stored in the .config, right? So no need to pass it 
every time?

  In fact, if the config option would get a prompt, you could even enter 
it through the config instead of through the environment. The only reason 
to pass it through the environment is to be able to list the available 
defconfigs.

  Or am I missing something?

> +
> +Examples:
> +
> +-----
> + buildroot/ $ make BR2_EXTERNAL=../company menuconfig
> + buildroot/ $ make BR2_EXTERNAL=../company
> +-----
> +
> +This +BR2_EXTERNAL+ then allows three different things:
> +
> + * One can store all the board-specific configuration files here, such
> +   as the kernel configuration, the root filesystem overlay, or any
> +   other configuration file for which Buildroot allows to set its
> +   location. The +BR2_EXTERNAL+ value is available within the
> +   Buildroot configuration using +$(BR2_EXTERNAL)+. As an example, one
> +   could set the +BR2_ROOTFS_OVERLAY+ Buildroot option to
> +   +$(BR2_EXTERNAL)/board/someboard/overlay/+ (to specify a root
> +   filesystem overlay), or the +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE+
> +   Buildroot option to +$(BR2_EXTERNAL)/board/someboard/kernel.config+
> +   (to specify the location of the kernel configuration file).
> ++
> +To achieve this, it is recommended but not mandatory, to store those
> +   details in directories called +board/<boardname>/+ under

  You use someboard instead of <boardname> earlier.

> +   +BR2_EXTERNAL+.
> +
> + * One can store package recipes (i.e +Config.in+ and
> +   +<packagename>.mk+), or even custom configuration options and make
> +   logic. Buildroot automatically includes +BR2_EXTERNAL/Config.in+ to
> +   make it appear in the top-level configuration menu, and includes
> +   +BR2_EXTERNAL/external.mk+ with the rest of the makefile logic.
> ++
> +The main usage of this would be to store package recipes. The
> +   recommended way to do this is to write a +BR2_EXTERNAL/Config.in+
> +   that looks like:
> ++
> +------
> +menu "<somecompany> packages"
> +
> +source "$BR2_EXTERNAL/package/package1/Config.in"
> +source "$BR2_EXTERNAL/package/package2/Config.in"

  Wow, does this work? Then actually, you don't need that generated 
Config.in at all... Instead, you can add

source "$BR2_EXTERNAL/package/Config.in"

to the top of package/Config.in. And set a non-empty default for 
BR2_EXTERNAL, e.g. $(TOPDIR)/support/dummy_external, which contains an 
empty package/Config.in.

  Regards,
  Arnout

> +
> +endmenu
> +------
> ++
> +Then, have a +BR2_EXTERNAL/external.mk' file that looks like:
> ++
> +------
> +include $(BR2_EXTERNAL)/package/*/*.mk
> +------
> ++
> +And then in +BR2_EXTERNAL/package/package1+ and
> +   +BR2_EXTERNAL/package/package2+ create normal Buildroot package
> +   recipes, as explained in xref:adding-packages[].
> +
> + * One can store Buildroot defconfigs in the +configs+ subdirectory of
> +   +BR2_EXTERNAL+. Buildroot will automatically show them in the
> +   output of +make help+ and allow them to be loaded with the normal
> +   +make <name>_defconfig+ command.
> +
> +In the end, a typical +BR2_EXTERNAL+ directory organization would
> +generally be:
> +
> +-----
> +??? Config.in
> +??? external.mk
> +??? board/
> +?   ??? <someboard>/
> +?       ??? overlay/
> +?           ??? etc/
> +?               ??? <some file>
> +??? configs/
> +?   ??? <some board>_defconfig
> +??? package/
> +    ??? Config.in
> +    ??? package1/
> +        ??? Config.in
> +        ??? package1.mk
> +    ??? package2/
> +        ??? Config.in
> +        ??? package2.mk
> +------
> diff --git a/docs/manual/customize.txt b/docs/manual/customize.txt
> index 0456ef1..7e46fd8 100644
> --- a/docs/manual/customize.txt
> +++ b/docs/manual/customize.txt
> @@ -17,3 +17,5 @@ include::customize-toolchain.txt[]
>   include::customize-store.txt[]
>
>   include::customize-packages.txt[]
> +
> +include::customize-outside-br.txt[]
>


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12  7:54         ` Thomas De Schampheleire
  2013-09-12 18:21           ` Thomas Petazzoni
@ 2013-09-12 21:50           ` Yann E. MORIN
  1 sibling, 0 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-12 21:50 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2013-09-12 09:54 +0200, Thomas De Schampheleire spake thusly:
> On Wed, Sep 11, 2013 at 7:27 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> > Ryan, Thomas, All,
> >
> [..]
> >
> > Yes, as I said above, I would have expected companies (well, people at
> > companies) be stressed by projects deadlines, and that they would work
> > in BR2_EXTERNAL, and only try to upstream later, when it would be too
> > late (for them!) to have proper reviews, since they would be internally
> > committed to their changes in BR2_EXTERNAL, and we would not be able to
> > take their changes.
> >
> > But if people use BR2_EXTERNAL as a fallback for anything that did not
> > make it upstream (by lack of time, or of interest), or for purely
> > internal stuff, then I don't see a reason for concern. All the better! :-)
> >
> 
> Not to ruin the atmosphere, but even though Ryan and his colleagues
> may be using BR2_EXTERNAL 'the good way', ultimately helping the
> buildroot project with their contributions, the danger of others not
> doing that is still real.

Yes, of course. Don't stop me from being optimistic for once, please! ;-)

> Of course, _not_ contributing changes made
> in a company project was also possible previously, without
> BR2_EXTERNAL, so this is no reason to block the patchset.

Quite the opposite: Thomas P. did convince me on IRC and with this
patchset (which I have already started to ack). I still have to ack
patch 2, and did not do so since I haven't yet reviewed and tested here
first.

So, no, I will not try to block this, but rather try to push it since it
is a oft-wanted feature, and Thomas P has come up with a rather sane
solution to do it the Buildroot way. This will eventually stop people
from banging their heads on this for good. :-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-12 21:41         ` Arnout Vandecappelle
@ 2013-09-12 21:51           ` Ryan Barnett
  2013-09-12 21:57             ` Arnout Vandecappelle
  0 siblings, 1 reply; 84+ messages in thread
From: Ryan Barnett @ 2013-09-12 21:51 UTC (permalink / raw)
  To: buildroot

Arnout Vandecappelle <arnout@mind.be> wrote on 09/12/2013 04:41:49 PM:

> On 12/09/13 23:30, Ryan Barnett wrote:
> > Arnout Vandecappelle <arnout@mind.be> wrote on 09/12/2013 04:05:18 PM:
> >
> >  > On 11/09/13 04:03, rjbarnet at rockwellcollins.com wrote:
> >  > > Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on
> >  > > 09/08/2013 08:15:28 AM:
> >  > >
> >  > >  >
> >  > >  > Signed-off-by: Thomas Petazzoni 
<thomas.petazzoni@free-electrons.com>
> >  > >  > ---
> >  > >  >  Config.in   |  6 ++++--
> >  > >  >  Makefile    | 29 +++++++++++++++++++++++++----
> >  > >  >  docs/manual/manual.mk |  2 +-
> >  > >
> >  > > One idea that I have, is for the make file that is genreated for 
the an
> >  > > external output directory, if we could preserve the the value of
> >  > > BR2_EXTERNAL
> >  > > as follows.
> >  >
> >  >   Thomas's patch already does that, because BR2_EXTERNAL is stored 
in the
> >  > config file.
> >  >
> >
> > I don't believe it gets stored in the config since Config.in pulls
> > the variable in from the shell's or make's environment.
> >
> > +config BR2_EXTERNAL
> > +       string
> > +       option env="BR2_EXTERNAL"
> >
> > In order to utilize the BR2_EXTERNAL feature I must have BR2_EXTERNAL
> > either exported into my environment or be called as
> 
>   The Makefile exports it in the environment of the Kconfig targets. So 
> once it is in the .config, it will stay there. Try it and you'll see :-)

I have looked as I'm experiment with this and it definitely isn't there :) 

Also according to the documentation you need to define it every time :)

> >
> > 'make BR2_EXTERNAL=/some/path <target>'
> >
> >
> > When utilizing the BR2_EXTERNAL I usual want to use some defconfig 
from
> > my BR2_EXTERNAL so it adding it the makefile that is generated in your
> > build directory when specifying O= would be extermely useful as that
> > way I can switch shells and my definition of BR2_EXTERNAL would still
> > be present.
> >
> > 'make O=/build/path BR2_EXTERNAL=/path/to/external defconfig'
> 
>   In this particular case, you're not using the Makefile in the output 
> dir but only in the buildroot dir so it's not relevant.
> 
>   The only case where it would be relevant is when you have an existing 
> output directory, you remove the .config first, and then you do a
> make foo_defconfig. Seems a bit an unlikely scenario.
> 
>   Regards,
>   Arnout

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130912/1906f3f7/attachment.html>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 18:21           ` Thomas Petazzoni
  2013-09-12 18:25             ` ANDY KENNEDY
@ 2013-09-12 21:51             ` Yann E. MORIN
  2013-09-13  7:35             ` Thomas De Schampheleire
  2 siblings, 0 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-12 21:51 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2013-09-12 20:21 +0200, Thomas Petazzoni spake thusly:
> On Thu, 12 Sep 2013 09:54:56 +0200, Thomas De Schampheleire wrote:
> 
> > > Yes, as I said above, I would have expected companies (well, people at
> > > companies) be stressed by projects deadlines, and that they would work
> > > in BR2_EXTERNAL, and only try to upstream later, when it would be too
> > > late (for them!) to have proper reviews, since they would be internally
> > > committed to their changes in BR2_EXTERNAL, and we would not be able to
> > > take their changes.
> > >
> > > But if people use BR2_EXTERNAL as a fallback for anything that did not
> > > make it upstream (by lack of time, or of interest), or for purely
> > > internal stuff, then I don't see a reason for concern. All the better! :-)
> > >
> > 
> > Not to ruin the atmosphere, but even though Ryan and his colleagues
> > may be using BR2_EXTERNAL 'the good way', ultimately helping the
> > buildroot project with their contributions, the danger of others not
> > doing that is still real. Of course, _not_ contributing changes made
> > in a company project was also possible previously, without
> > BR2_EXTERNAL, so this is no reason to block the patchset.
> 
> Yes, that's what I believe: companies and people are forking Buildroot
> nowadays. As I highlighted in my reply to Yann's e-mail, BR2_EXTERNAL
> may in fact encourage companies in separating their specific changes
> from the changes that could potentially be upstreamed, and therefore
> encourage upstream.
> 
> I really don't think BR2_EXTERNAL is going to make things worse in
> terms of upstreaming.

Agreed.

It makes it easier fro them not to upstream, but since it was not
complex to do so before, that does virtually change nothing.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Fwd:  [PATCH 2/3] Add support for BR2_EXTERNAL
       [not found]   ` <CAC2S8kiHUwNFprvvYd85UEGjDJhEX0Jgtb4e7Pd1vwwFGF7m_w@mail.gmail.com>
@ 2013-09-12 21:53     ` Ryan Barnett
  0 siblings, 0 replies; 84+ messages in thread
From: Ryan Barnett @ 2013-09-12 21:53 UTC (permalink / raw)
  To: buildroot

While utilizing this patch, I found the following that should be fixed

Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote on 09/12/2013 
04:39 PM:

> diff --git a/Makefile b/Makefile
> index fc55b87..1014399 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -47,7 +47,6 @@ export HOSTARCH := $(shell uname -m | \
> 
>  # absolute path
>  TOPDIR:=$(shell pwd)
> -CONFIG_CONFIG_IN=Config.in
>  CONFIG=support/kconfig
>  DATE:=$(shell date +%Y%m%d)
> 
> @@ -339,6 +338,10 @@ include boot/common.mk
>  include linux/linux.mk
>  include system/system.mk
> 
> +ifneq ($(BR2_EXTERNAL),)
> +include $(BR2_EXTERNAL)/external.mk
> +endif
> +
>  TARGETS+=target-finalize
> 
>  ifeq ($(BR2_ENABLE_LOCALE_PURGE),y)
> @@ -622,6 +625,18 @@ $(BUILD_DIR)/buildroot-config/%onf:
>         mkdir -p $(@D)/lxdialog
>         $(MAKE) CC="$(HOSTCC_NOCCACHE)" HOSTCC="$(HOSTCC_NOCCACHE)"
> obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
> 
> +CONFIG_CONFIG_IN=$(BUILD_DIR)/buildroot-config/toplevel.in
> +
> +# This is intentionally a virtual target so that the file gets
> +# regenerated everytime this target is invoked.
> +toplevelin-generate:
> +       mkdir -p $(dir $(CONFIG_CONFIG_IN))
> +       echo "mainmenu \"Buildroot $$BR2_VERSION Configuration\"" >
> $(CONFIG_CONFIG_IN)
> +       echo "source \"Config.in\"" >> $(CONFIG_CONFIG_IN)
> +ifneq ($(BR2_EXTERNAL),)
> +       echo "source \"$$BR2_EXTERNAL/Config.in\"" >> 
$(CONFIG_CONFIG_IN)
> +endif
> +
>  DEFCONFIG = $(call qstrip,$(BR2_DEFCONFIG))

Each command above should have a @ symbol since the commands print out 
every
time. As follows:

+toplevelin-generate:
+       @mkdir -p $(dir $(CONFIG_CONFIG_IN))
+       @echo "mainmenu \"Buildroot $$BR2_VERSION Configuration\"" >
$(CONFIG_CONFIG_IN)
+       @echo "source \"Config.in\"" >> $(CONFIG_CONFIG_IN)
+ifneq ($(BR2_EXTERNAL),)
+       @echo "source \"$$BR2_EXTERNAL/Config.in\"" >> $(CONFIG_CONFIG_IN)
+endif
+

>  # We don't want to fully expand BR2_DEFCONFIG here, so Kconfig will
> @@ -631,10 +646,12 @@ COMMON_CONFIG_ENV = \
>         KCONFIG_AUTOCONFIG=$(BUILD_DIR)/buildroot-config/auto.conf \
>         KCONFIG_AUTOHEADER=$(BUILD_DIR)/buildroot-config/autoconf.h \
>         KCONFIG_TRISTATE=$(BUILD_DIR)/buildroot-config/tristate.config \
> -       BUILDROOT_CONFIG=$(BUILDROOT_CONFIG)
> +       BUILDROOT_CONFIG=$(BUILDROOT_CONFIG) \
> +       BR2_EXTERNAL=$(BR2_EXTERNAL)
> 
>  COMMON_CONFIG_DEPS = \
> -       outputmakefile
> +       outputmakefile \
> +       toplevelin-generate
> 
>  xconfig: $(BUILD_DIR)/buildroot-config/qconf $(COMMON_CONFIG_DEPS)
>         @mkdir -p $(BUILD_DIR)/buildroot-config
> @@ -718,6 +735,10 @@ defconfig: $(BUILD_DIR)/buildroot-config/conf
> $(COMMON_CONFIG_DEPS)
>         @mkdir -p $(BUILD_DIR)/buildroot-config
>         @$(COMMON_CONFIG_ENV) $< --defconfig=$(TOPDIR)/configs/$@
> $(CONFIG_CONFIG_IN)
> 
> +%_defconfig: $(BUILD_DIR)/buildroot-config/conf
> $(BR2_EXTERNAL)/configs/%_defconfig $(COMMON_CONFIG_DEPS)
> +       @mkdir -p $(BUILD_DIR)/buildroot-config
> +       @$(COMMON_CONFIG_ENV) $<
> --defconfig=$(BR2_EXTERNAL)/configs/$@ $(CONFIG_CONFIG_IN)
> +
>  savedefconfig: $(BUILD_DIR)/buildroot-config/conf $(COMMON_CONFIG_DEPS)
>         @mkdir -p $(BUILD_DIR)/buildroot-config
>         @$(COMMON_CONFIG_ENV) $< \
> @@ -829,7 +850,7 @@ endif
>         @echo '  make V=0|1             - 0 => quiet build (default),
> 1 => verbose build'
>         @echo '  make O=dir             - Locate all output files in
> "dir", including .config'
>         @echo
> -       @$(foreach b, $(sort $(notdir $(wildcard
> $(TOPDIR)/configs/*_defconfig))), \
> +       @$(foreach b, $(sort $(notdir $(wildcard
> $(TOPDIR)/configs/*_defconfig $(BR2_EXTERNAL)/configs/*_defconfig))),
> \
>           printf "  %-35s - Build for %s\\n" $(b) $(b:_defconfig=);)
>         @echo
>         @echo 'See docs/README, or generate the Buildroot manual for
> further details'
> diff --git a/docs/manual/manual.mk b/docs/manual/manual.mk
> index 4906bc8..8e0ab30 100644
> --- a/docs/manual/manual.mk
> +++ b/docs/manual/manual.mk
> @@ -1,6 +1,6 @@
>  manual-update-lists:
>         $(Q)$(call MESSAGE,"Updating the manual lists...")
> -       $(Q)BR2_DEFCONFIG="" TOPDIR=$(TOPDIR) O=$(O)/docs/manual/.build 
\
> +       $(Q)BR2_DEFCONFIG="" BR2_EXTERNAL="$(BR2_EXTERNAL)"
> TOPDIR=$(TOPDIR) O=$(O)/docs/manual/.build \
>                 $(TOPDIR)/support/scripts/gen-manual-lists.py
> 
> 
> 
################################################################################
> --
> 1.8.1.2
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130912/3f5ae746/attachment.html>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-12 21:51           ` Ryan Barnett
@ 2013-09-12 21:57             ` Arnout Vandecappelle
  2013-09-12 22:11               ` Ryan Barnett
  0 siblings, 1 reply; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-12 21:57 UTC (permalink / raw)
  To: buildroot

On 12/09/13 23:51, Ryan Barnett wrote:
>  > > In order to utilize the BR2_EXTERNAL feature I must have BR2_EXTERNAL
>  > > either exported into my environment or be called as
>  >
>  >   The Makefile exports it in the environment of the Kconfig targets. So
>  > once it is in the .config, it will stay there. Try it and you'll see :-)
>
> I have looked as I'm experiment with this and it definitely isn't there :)
> Also according to the documentation you need to define it every time :)
>

  Ah, yes indeed, sorry about that - I was trying to be too smart.

  To save it in the .config, it needs a prompt, and to be able to take it 
from the environment it needs a helper variable. Like BR2_DEFCONFIG.


  Regards,
  Arnout

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 18:33               ` Thomas Petazzoni
  2013-09-12 18:44                 ` ANDY KENNEDY
@ 2013-09-12 22:04                 ` Arnout Vandecappelle
  2013-09-12 22:12                   ` Yann E. MORIN
  2013-09-12 22:07                 ` Yann E. MORIN
  2 siblings, 1 reply; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-12 22:04 UTC (permalink / raw)
  To: buildroot

On 12/09/13 20:33, Thomas Petazzoni wrote:
> Dear ANDY KENNEDY,
>
> On Thu, 12 Sep 2013 18:25:40 +0000, ANDY KENNEDY wrote:
>
>> This sounds much like the way Linux does things for the IP related
>> drivers.  Is that the intent we are going for (personally, I think this
>> is a GREAT idea, as it allows companies to have IP related widgets in
>> BuildRoot without the fear of being REQUIRED to push back their secret
>> sauce)?
>>
>> If that is what you intend, you have my vote!
>
> I am not sure what you mean by "IP related drivers". Do you mean
> proprietary drivers?
>
> It is true that the BR2_EXTERNAL thing raises a licensing question:
> should the BR2_EXTERNAL contents also be released under GPLv2, like the
> rest of Buildroot? Do we really want the root filesystem overlays and
> other highly project-specific contents be released under GPLv2 ?

  You can never be sure unless a judge makes a ruling, but the GPL is 
pretty clear on this:

"If identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works."

  i.e. you can distribute the source of buildroot itself separately from 
your external directory.

  GPL continues:

"But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License."

  As long as your external stuff merely aggregates with the GPL'd stuff 
under buildroot, there shouldn't be an issue.


  Regards,
  Arnout



-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 18:33               ` Thomas Petazzoni
  2013-09-12 18:44                 ` ANDY KENNEDY
  2013-09-12 22:04                 ` Arnout Vandecappelle
@ 2013-09-12 22:07                 ` Yann E. MORIN
  2013-09-12 22:28                   ` ANDY KENNEDY
  2 siblings, 1 reply; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-12 22:07 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2013-09-12 20:33 +0200, Thomas Petazzoni spake thusly:
> On Thu, 12 Sep 2013 18:25:40 +0000, ANDY KENNEDY wrote:
> 
> > This sounds much like the way Linux does things for the IP related
> > drivers.  Is that the intent we are going for (personally, I think this
> > is a GREAT idea, as it allows companies to have IP related widgets in
> > BuildRoot without the fear of being REQUIRED to push back their secret
> > sauce)?
> > 
> > If that is what you intend, you have my vote!
> 
> I am not sure what you mean by "IP related drivers". Do you mean
> proprietary drivers?
> 
> It is true that the BR2_EXTERNAL thing raises a licensing question:
> should the BR2_EXTERNAL contents also be released under GPLv2, like the
> rest of Buildroot? Do we really want the root filesystem overlays and
> other highly project-specific contents be released under GPLv2 ?

IANAL, this is not legal advice, talk to your lawyer.

Here are however my toughts on this:

 1- all the Config.in and package.mk files, plus the external.mk file,
    and all other files sourced or otherwise included by a file from
    Buildroot (and thus use Buildroot's infrastructure) could be
    considered a derived work of Buildroot, and thus must be licensed
    with a compatible license,
 2- the defconfigs could be considered as what the GPL identifies as the
    "scripts used to control compilation and installation of the
    executable", since without the .config file, an end-user can not
    reproduce the executable(s),
 3- everything else might be considered not a derived work of Buildroot,
    and might not be required to be licensed with a license compatible
    with Buildroot's license.

Explanations:

1- It's not because it is to be licensed under a license compatible with
   the Buildroot  license that it *has* to be distributed. Just that if
   it *is* distributed, the licensing terms on that should be compatible
   with Buildroot's licensing terms.

2- That's because Buildroot will most probably build a GPL/LGPL program
   that will end up in the ytarget that this applies, because of the
   license of those programs, not because of Buildroot's license. Even
   if Buildroot was under a different license, this would still apply as
   long as a GPL/LGPL program ends up in the target.

3- By "everything else", I mean: a package (in Buildroot's terminology:
   the Config.in and associated .mk file) that directly embbeds the source
   files (.c and .h and ...) for this package (like the host-mkpasswd).
   These source files can not be considered a derived work of Buildroot,
   so Buildroot's license does not apply to those.

So, I think the make legal-stuff should descend into BR2_EXTERNAL, as if
it was an integral part of Buildroot.

BR2_EXTERNAL is here *just* to separate parts of the recipes from the
upstream ones, as a mean to clearly separate local changes from the
upstream reference.

But again: IANAL, this is not legal advice, talk to your legal counsel.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-12 21:57             ` Arnout Vandecappelle
@ 2013-09-12 22:11               ` Ryan Barnett
  2013-09-13 20:56                 ` Arnout Vandecappelle
  0 siblings, 1 reply; 84+ messages in thread
From: Ryan Barnett @ 2013-09-12 22:11 UTC (permalink / raw)
  To: buildroot

Arnout Vandecappelle <arnout@mind.be> wrote on 09/12/2013 04:57:04 PM:

> On 12/09/13 23:51, Ryan Barnett wrote:
> >  > > In order to utilize the BR2_EXTERNAL feature I must have 
BR2_EXTERNAL
> >  > > either exported into my environment or be called as
> >  >
> >  >   The Makefile exports it in the environment of the Kconfig 
targets. So
> >  > once it is in the .config, it will stay there. Try it and you'll 
see :-)
> >
> > I have looked as I'm experiment with this and it definitely isn't 
there :)
> > Also according to the documentation you need to define it every time 
:)
> >
> 
>   Ah, yes indeed, sorry about that - I was trying to be too smart.

Happens to the best of us.

>   To save it in the .config, it needs a prompt, and to be able to take 
it 
> from the environment it needs a helper variable. Like BR2_DEFCONFIG.

I like to view BR2_EXTERNAL as something that is similar to "O=" which 
means
that I have the ability to change it at a moments notice. However, like it 

is done in mkmakefile when doing the following from within buildroot 
toplevel
source directory:

make O=/path/to/build defconfig

O= is stored in the generated makefile (as you know). However, it gets 
very
annoying to type BR2_EXTERNAL=/path/to/external and I don't always want to
export it as shell environment variable. Thus, adding that line to 
mkmakefile is handy since usually when you specify O= you are doing a 
specific build which BR2_EXTERNAL would definitely be a part of.

Thanks,
-Ryan


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130912/a4e733ea/attachment.html>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 22:04                 ` Arnout Vandecappelle
@ 2013-09-12 22:12                   ` Yann E. MORIN
  2013-09-13 21:50                     ` Arnout Vandecappelle
  0 siblings, 1 reply; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-12 22:12 UTC (permalink / raw)
  To: buildroot

On 2013-09-13 00:04 +0200, Arnout Vandecappelle spake thusly:
> On 12/09/13 20:33, Thomas Petazzoni wrote:
> >Dear ANDY KENNEDY,
> >
> >On Thu, 12 Sep 2013 18:25:40 +0000, ANDY KENNEDY wrote:
> >
> >>This sounds much like the way Linux does things for the IP related
> >>drivers.  Is that the intent we are going for (personally, I think this
> >>is a GREAT idea, as it allows companies to have IP related widgets in
> >>BuildRoot without the fear of being REQUIRED to push back their secret
> >>sauce)?
> >>
> >>If that is what you intend, you have my vote!
> >
> >I am not sure what you mean by "IP related drivers". Do you mean
> >proprietary drivers?
> >
> >It is true that the BR2_EXTERNAL thing raises a licensing question:
> >should the BR2_EXTERNAL contents also be released under GPLv2, like the
> >rest of Buildroot? Do we really want the root filesystem overlays and
> >other highly project-specific contents be released under GPLv2 ?
> 
>  You can never be sure unless a judge makes a ruling, 

Agreed: only a judge can decide.

So: IANAL, and so on...

> but the GPL is pretty
> clear on this:
> 
> "If identifiable sections of that work are not derived from the Program,
> and can be reasonably considered independent and separate works in
> themselves, then this License, and its terms, do not apply to those
> sections when you distribute them as separate works."
> 
>  i.e. you can distribute the source of buildroot itself separately from your
> external directory.

Yes, but I believe BR2_EXTERNAL *is* a derived work of Buildroot, so as
such should be licensed under a license compatible with Buildroot's.

>  As long as your external stuff merely aggregates with the GPL'd stuff under
> buildroot, there shouldn't be an issue.

But that's not aggregation in my opinion, since it does leverage all or
parts of the Buildroot infrastrucutre, and was clearly written with this
intent, and as such can not be considered mere aggregation.

Of course, all this only applies _if and when_ BR2_EXTERNAL gets
distributed to a third party.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 18:18         ` Thomas Petazzoni
@ 2013-09-12 22:24           ` Yann E. MORIN
  0 siblings, 0 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-12 22:24 UTC (permalink / raw)
  To: buildroot

On 2013-09-12 20:18 +0200, Thomas Petazzoni spake thusly:
> Dear Yann E. MORIN,
> 
> On Wed, 11 Sep 2013 19:27:09 +0200, Yann E. MORIN wrote:
> 
> > > That just becomes nasty and doesn't really easily allow for different 
> > > configurations where you don't always want all your propriety packages
> > > to build. Also it doesn't make your propriety packages visible within
> > > the buildroot menuconfig. The other nice feature is the is that company's
> > > configs are automatically pulled in a separate area.
> > 
> > The way *I* see this is that Buildroot is not the main /frontend/ of the
> > build system, but rather a backend. That's the way I use it: I have a
> > kind of /upper-layer/ build system that uses Buildroot as a kind of
> > /backend/.
> 
> I think that's one way of using it, but that's not necessarily the only
> way we should support.

Sorry, I never said so. I just said how *I* use it in my own use-case,
to illustrate yet another way to use Buildroot.

> In all the Buildroot based projects I've done,
> I've also tried to make Buildroot directly be the front-end, and
> include whatever build logic is needed within Buildroot.
> 
> I can only remember of one project in which I did not do that, and it
> was because the customer had already written his build logic using
> Buildroot as a back-end.

Yes, we should keep Buildroot a self-contained project. That it gets
also used as a kind of backend does not mean Buildrot *is* a backend.

> > Yes, as I said above, I would have expected companies (well, people at
> > companies) be stressed by projects deadlines, and that they would work
> > in BR2_EXTERNAL, and only try to upstream later, when it would be too
> > late (for them!) to have proper reviews, since they would be internally
> > committed to their changes in BR2_EXTERNAL, and we would not be able to
> > take their changes.
> > 
> > But if people use BR2_EXTERNAL as a fallback for anything that did not
> > make it upstream (by lack of time, or of interest), or for purely
> > internal stuff, then I don't see a reason for concern. All the better! :-)
> 
> If companies are in a hurry, they are not going to upstream anything
> anyway, so we're not loosing something. Today, without BR2_EXTERNAL,
> companies can already fork Buildroot, do a massive amount of changes
> directly within Buildroot, and not upstream anything at all. Therefore,
> adding BR2_EXTERNAL is not going to make things worse.
> 
> I believe it could potentially make things better. It might allow
> companies to separate what they consider "company-specific" in the
> BR2_EXTERNAL directory, while still making the Buildroot core changes,
> or open-source package additions in the main Buildroot tree, and submit
> those changes upstream. It allows them to keep cleanly separated the
> changes that will never be upstreamed because it doesn't make sense
> (specific board support, highly specific and proprietary packages) from
> the things that might be upstreamed if the submission effort is made.

I completely agree with you.

You showed me the Light, and I've seen the Light, now! :-)

Anyway, maybe we should make this clear in the manual what BR2_EXTERNAL
is really for non-FLOSS, proprietary packages, and that FLOSS packages
should be done in Buildroot, nit in BR2_EXTERNAL.

Alternatively, I can see BR2_EXTERNAL as a staging location where a
company may introduce new (FLOSS) packages, and move them to Buildroot
just prior to upstreaming. Enforcing Buildroot's layout in BR2_EXTERNAL
would surely help in this regard, I believe.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 22:07                 ` Yann E. MORIN
@ 2013-09-12 22:28                   ` ANDY KENNEDY
  2013-09-12 22:47                     ` Yann E. MORIN
  0 siblings, 1 reply; 84+ messages in thread
From: ANDY KENNEDY @ 2013-09-12 22:28 UTC (permalink / raw)
  To: buildroot

> Yann E. MORIN wrote:
> IANAL, this is not legal advice, talk to your lawyer.
> 
> Here are however my toughts on this:
> 
>  1- all the Config.in and package.mk files, plus the external.mk file,
>     and all other files sourced or otherwise included by a file from
>     Buildroot (and thus use Buildroot's infrastructure) could be
>     considered a derived work of Buildroot, and thus must be licensed
>     with a compatible license,
>  2- the defconfigs could be considered as what the GPL identifies as the
>     "scripts used to control compilation and installation of the
>     executable", since without the .config file, an end-user can not
>     reproduce the executable(s),
>  3- everything else might be considered not a derived work of Buildroot,
>     and might not be required to be licensed with a license compatible
>     with Buildroot's license.
> 
> Explanations:
> 
> 1- It's not because it is to be licensed under a license compatible with
>    the Buildroot  license that it *has* to be distributed. Just that if
>    it *is* distributed, the licensing terms on that should be compatible
>    with Buildroot's licensing terms.
> 
> 2- That's because Buildroot will most probably build a GPL/LGPL program
>    that will end up in the ytarget that this applies, because of the
>    license of those programs, not because of Buildroot's license. Even
>    if Buildroot was under a different license, this would still apply as
>    long as a GPL/LGPL program ends up in the target.
> 
> 3- By "everything else", I mean: a package (in Buildroot's terminology:
>    the Config.in and associated .mk file) that directly embbeds the source
>    files (.c and .h and ...) for this package (like the host-mkpasswd).
>    These source files can not be considered a derived work of Buildroot,
>    so Buildroot's license does not apply to those.
> 
> So, I think the make legal-stuff should descend into BR2_EXTERNAL, as if
> it was an integral part of Buildroot.
> 
> BR2_EXTERNAL is here *just* to separate parts of the recipes from the
> upstream ones, as a mean to clearly separate local changes from the
> upstream reference.
> 
> But again: IANAL, this is not legal advice, talk to your legal counsel.


Since tone is difficult to understand through e-mail, please understand
that I'm not attempting to start a flame war, nor am I throwing stones. . .
just brainstorming (or in my case, perhaps a light shower).

You speak of BuildRoot as a third party.  BuildRoot is not really a third
party but is first person from my point of view.  Although I have not added
NEAR as much as other people, I still contend that I am partial owner in
BuildRoot.  To that end, I have a voice in the decision making over any
external (or internal for that matter) infrastructure and/or tie-in.

If we choose to allow outside companies to use BuildRoot to develop systems
with Intellectual Property (IP) -- which is why we all contribute to
BuildRoot in the first place right?  I mean, surely I'm not the only one
here who has paid for my house, cars, kids, etc by using Linux (and by
extension BuildRoot) to develop embedded systems. -- then we are here-by
GRANTING permissions, as the current developers of BuildRoot, that Sure
"Super Company XYZ" you can use our previous work to go forth and make
Linux products.  IMO, the more users we have of Open Sourced software, the
better the software becomes.  Just because I push something back to the
community doesn't mean that I have given away some sort of trade secrete.
How I use the widget may be the trade secret, but that is none of anyone
else's business (and EXCEEDS the scope of the GPL).

So, can we not attempt to come to a consensus within our own little
BuildRoot family of how we will allow others to use such a tie-in?  If the
general populous of this family decides that we want to protect what we
have done, so be it.  But, if most of us feels that we should allow
companies/individuals to expand what is built with BuildRoot without the
fear of the FSF coming to hunt down all their children, then we should, as
the property holders, grant that permission EXPLICITLY.

Again, If I'm the only one that feels this way, tell me to shut up and I'll
say nothing else about it.  I just don't think that using Linus's kernel
under the hood, and the GNU project's additions to it requires the developers
of a product to "open source" the product just because they are, within the
confines of the granted licenses, and within GOOD FAITH of the company and
free software community, using said base.

Andy

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 22:28                   ` ANDY KENNEDY
@ 2013-09-12 22:47                     ` Yann E. MORIN
  2013-09-15 13:18                       ` Thomas De Schampheleire
  0 siblings, 1 reply; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-12 22:47 UTC (permalink / raw)
  To: buildroot

Andy, All,

On 2013-09-12 22:28 +0000, ANDY KENNEDY spake thusly:
> > Yann E. MORIN wrote:
> > IANAL, this is not legal advice, talk to your lawyer.
> > 
> > Here are however my toughts on this:
> > 
> >  1- all the Config.in and package.mk files, plus the external.mk file,
> >     and all other files sourced or otherwise included by a file from
> >     Buildroot (and thus use Buildroot's infrastructure) could be
> >     considered a derived work of Buildroot, and thus must be licensed
> >     with a compatible license,
> >  2- the defconfigs could be considered as what the GPL identifies as the
> >     "scripts used to control compilation and installation of the
> >     executable", since without the .config file, an end-user can not
> >     reproduce the executable(s),
> >  3- everything else might be considered not a derived work of Buildroot,
> >     and might not be required to be licensed with a license compatible
> >     with Buildroot's license.
> > 
> > Explanations:
> > 
> > 1- It's not because it is to be licensed under a license compatible with
> >    the Buildroot  license that it *has* to be distributed. Just that if
> >    it *is* distributed, the licensing terms on that should be compatible
> >    with Buildroot's licensing terms.
> > 
> > 2- That's because Buildroot will most probably build a GPL/LGPL program
> >    that will end up in the ytarget that this applies, because of the
> >    license of those programs, not because of Buildroot's license. Even
> >    if Buildroot was under a different license, this would still apply as
> >    long as a GPL/LGPL program ends up in the target.
> > 
> > 3- By "everything else", I mean: a package (in Buildroot's terminology:
> >    the Config.in and associated .mk file) that directly embbeds the source
> >    files (.c and .h and ...) for this package (like the host-mkpasswd).
> >    These source files can not be considered a derived work of Buildroot,
> >    so Buildroot's license does not apply to those.
> > 
> > So, I think the make legal-stuff should descend into BR2_EXTERNAL, as if
> > it was an integral part of Buildroot.
> > 
> > BR2_EXTERNAL is here *just* to separate parts of the recipes from the
> > upstream ones, as a mean to clearly separate local changes from the
> > upstream reference.
> > 
> > But again: IANAL, this is not legal advice, talk to your legal counsel.
> 
> 
> Since tone is difficult to understand through e-mail, please understand
> that I'm not attempting to start a flame war, nor am I throwing stones. . .
> just brainstorming (or in my case, perhaps a light shower).

No problem, there are no feelings in my words (OK, just a very little bit!).

> You speak of BuildRoot as a third party.  BuildRoot is not really a third
> party but is first person from my point of view.

No, Buildroot is *not* a third party.

Consider this situation:
  Buildroot community
    -> makes Buildroot available under GPLv2

  Company FooCorp
    -> uses Buildroot
    -> creates BR2_EXTERNAL
    -> distributes BR2_EXTERNAL

  You or Me
    -> gets BR2_EXTERNAL from FooCorp

The third party I referred to (in my other mail) would be "You or Me"
here.

>  Although I have not added
> NEAR as much as other people, I still contend that I am partial owner in
> BuildRoot.  To that end, I have a voice in the decision making over any
> external (or internal for that matter) infrastructure and/or tie-in.

Yes, but since Buildroot pre-existed under the GPLv2 prior to your
changes, and your changes were made explicitly to work with Buildroot
(by being modifications to Buildroot), then those changes are GPLv2.

[--SNIP--]
What I'm arguing is that the content of BR2_EXTERNAL that _interacts
with Buildroot's internal infrastructure_ *are* a derived work of
Buildroot.

Let's take a (very simplistic) example:

    BR2_EXTERNAL/
        package/
            pkg-1/
                Config.in           *
                pkg-1.mk            *
                pkg-1-main.c        -
                pkg-1.h             -

* : a derived work of Buildroot
- : not a derived work of Buildroot

Config.in and pkg-1.mk are clearly (in my opinion) a derived work of
Buildroot, since they are written with the very intent to be interacting
with Buildroot's internal infrastructure.

But pkg-1-main.c and pkg-1.h (which are the C sources of pkg-1) are *not*
a derived work of Buildroot, and thus can well be under whatever license.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-12 21:04   ` Arnout Vandecappelle
@ 2013-09-13  3:48     ` Thomas Petazzoni
  2013-09-13  6:43       ` Tzu-Jung Lee
  0 siblings, 1 reply; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-13  3:48 UTC (permalink / raw)
  To: buildroot

Dear Arnout Vandecappelle,

On Thu, 12 Sep 2013 23:04:13 +0200, Arnout Vandecappelle wrote:

>   It's funny how people can change their mind...

Isn't it? In french, we have an expression that more or less says:
"only idiots don't change their mind" :-)

> On 08/09/13 15:15, Thomas Petazzoni wrote:
> > This commit adds support for an environment variable named
> > BR2_EXTERNAL, which the user can point to a directory outside of
> > Buildroot that contains root filesystem overlays, kernel configuration
> > files, package recipes, defconfigs, etc. It allows users to keep their
> > specific Buildroot customizations outside of the Buildroot tree.
> >
> > BR2_EXTERNAL allows:
> 
>   I would split this into three separate patches for the three separate 
> features. I think (1) and (3) are a lot less controversial than (2).

Hum, right, I might be splitting things, but I believe than (1) and (3)
without (2) doesn't make much sense.

> >   (1) To use $(BR2_EXTERNAL) in all Buildroot configuration options
> >       that take a path as argument. This allows to reference a root
> >       filesystem overlay, a kernel configuration file, a Barebox
> >       configuration file located in the BR2_EXTERNAL directory.
> 
>   Note to list: this was already possible before, of course, the 
> difference is that now this path will be stored in the .config.

I'm not sure why you think it's going to be stored in the .config. The
'config BR2_EXTERNAL' option is here only to "forward" the environment
variable as a kconfig value, and it doesn't seem to be stored in
the .config file, as far as I can see:

$ make BR2_EXTERNAL=../company/ menuconfig
$ grep BR2_EXTERNAL .config
$

>   There is one small issue with this: I don't think that all the use 
> cases support relative paths. Ideally, the Makefile should be smart 
> enough to prepend $(TOPDIR) if it doesn't start with a /.

So far the cases I've tested did support relative paths, but I agree
that turning it into an absolute path within the Makefile is probably
safer.

> >   (2) To store external package or makefile logic, since the
> >       BR2_EXTERNAL/external.mk file is automatically included by the
> >       Makefile logic, and the BR2_EXTERNAL/Config.in file is
> >       automatically included, and appears in the top-level menu. The
> >       typical usage would be to create a BR2_EXTERNAL/package/
> >       directory to contain package definitions.
> 
>   I'm not really convinced by the principle. The external.mk is exactly 
> the same as the local override .mk; the Config.in appears at the very end 
> of the top-level menu. Instead, I think we should enforce the buildroot 
> hierarchy in the external dir, i.e.
> 
> source <path-to-external-dir>/package/Config.in
> 
> at the top of package/Config.in, and
> 
> -include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk))
> 
> in the top-level Makefile.

This is what I had originally done, but it seemed to me that the
external stuff may wish to add other Kconfig options than just
packages. That said, I've done this BR2_EXTERNAL stuff mainly for
packages, so if people think that we should restrict this to packages,
I'm fine with that.

>   Of course, that Config.in thing is a lot trickier because it's almost 
> impossible to refer to the output directory from the Config.in.

I'm not sure to follow you on this one.

> >   * The top-level Config.in file given to kconfig is no longer the main
> >     Config.in in the Buildroot sources, but instead a toplevel.in file
> >     generated in the output directory, which includes the top-level
> >     Buildroot Config.in file and the BR2_EXTERNAL/Config.in file if
> >     provided. Since is needed because the kconfig 'source' statement
> >     errors out if the included file doesn't exist. I have written
> >     patches that add support for an 'isource' statement in kconfig
> >     (that silently ignores the inclusion if the pointed file doesn't
> >     exist), but keeping feature patches against kconfig doesn't seem
> >     like a good idea.
> 
>   It took me a while to realize that that was _not_ the approach you had 
> taken...

Yeah, sorry if the wording was confusing. I initially experimented by
doing a kconfig modification, and then realized it could be done
without changing kconfig at all, which is obviously nicer.

> >   * The BR2_EXTERNAL environment variable gets passed in the
> >     environment of kconfig and when executing the kconfiglib-based
> >     Python script that updates the manual, so that the references to
> >     the BR2_EXTERNAL variable within Config.in files can be resolved.
> 
>   So this means that the external packages will appear in the package 
> list in the manual? I'm not sure if that is what you typically want.

I remember having an issue with the manual generation script, but it
might have been caused by the earlier kconfig-based implementation. I
agree with quite certainly don't want to have the BR2_EXTERNAL packages
listed in the manual.


>   I guess you mean phony target. You should also add
> .PHONY: toplevelin-generate
> for the (unlikely) case that someone creates a file with this name.

Ok.

>   BTW I don't like the target's name. generate-config-dot-in maybe?

Ok.

> > +	mkdir -p $(dir $(CONFIG_CONFIG_IN))
> > +	echo "mainmenu \"Buildroot $$BR2_VERSION Configuration\"" > $(CONFIG_CONFIG_IN)
> > +	echo "source \"Config.in\"" >> $(CONFIG_CONFIG_IN)
> > +ifneq ($(BR2_EXTERNAL),)
> > +	echo "source \"$$BR2_EXTERNAL/Config.in\"" >> $(CONFIG_CONFIG_IN)
> 
>   $(BR2_EXTERNAL) would be a lot more readable than $$BR2_EXTERNAL IMHO. 
> Then you can also put it in single quotes and remove the \.

Right.


>   There is one tricky issue:
> 
> cd ~/src/myproject/output
> make -C ~/src/buildroot O=$PWD menuconfig
> Hack hack hack
> Hm, I need an external dir...
> BR2_EXTERNAL=.. make menuconfig
> => BR2_EXTERNAL will point to ~/src instead of ~/src/myproject
> 
>   I.e., it doesn't work well for relative paths.
> 
>   I don't know if there is an elegant way to solve that.

I'll have a look into this.


>   This should be in a
> ifneq ($(BR2_EXTERNAL),)

Right.

Thanks for the review!

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-13  3:48     ` Thomas Petazzoni
@ 2013-09-13  6:43       ` Tzu-Jung Lee
  2013-09-13  7:10         ` Thomas Petazzoni
  0 siblings, 1 reply; 84+ messages in thread
From: Tzu-Jung Lee @ 2013-09-13  6:43 UTC (permalink / raw)
  To: buildroot

Hi Thomas, Arnout, and all,

It's been a while... Arnout has a good memory :-)
And yes we have been using similar approach since then.

Thomas's patch is comprehensive, and we'd like to switch to the official
one whenever possible.

On Fri, Sep 13, 2013 at 11:48 AM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Dear Arnout Vandecappelle,
>
> On Thu, 12 Sep 2013 23:04:13 +0200, Arnout Vandecappelle wrote:
>
>>   There is one small issue with this: I don't think that all the use
>> cases support relative paths. Ideally, the Makefile should be smart
>> enough to prepend $(TOPDIR) if it doesn't start with a /.
>
> So far the cases I've tested did support relative paths, but I agree
> that turning it into an absolute path within the Makefile is probably
> safer.

>> >   (2) To store external package or makefile logic, since the
>> >       BR2_EXTERNAL/external.mk file is automatically included by the
>> >       Makefile logic, and the BR2_EXTERNAL/Config.in file is
>> >       automatically included, and appears in the top-level menu. The
>> >       typical usage would be to create a BR2_EXTERNAL/package/
>> >       directory to contain package definitions.
>>
>>   I'm not really convinced by the principle. The external.mk is exactly
>> the same as the local override .mk; the Config.in appears at the very end
>> of the top-level menu. Instead, I think we should enforce the buildroot
>> hierarchy in the external dir, i.e.
>>
>> source <path-to-external-dir>/package/Config.in
>>
>> at the top of package/Config.in, and
>>
>> -include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk))
>>
>> in the top-level Makefile.
>
> This is what I had originally done, but it seemed to me that the
> external stuff may wish to add other Kconfig options than just
> packages. That said, I've done this BR2_EXTERNAL stuff mainly for
> packages, so if people think that we should restrict this to packages,
> I'm fine with that.
>

We do want to support the absolute paths for both Config.in and *.mk.

As a "buildroot overlay", we have similar structures in overlay/ like
the buildroot/,
such as configs, fs, packages, etc.

This requires the buildroot to support only only the *.mk and
Config.in in the top
level over overlay/, but also those in their sub directories.

The *.mk case may be get rid of with Arnount's suggestion.
But I'm wondering could we solve the Config.in case in a less trickier way?

The following is the approach I've been used locally.

The overlay/Makefile plays a trick, which allows us to work under overlay/ as we
work under buildroot/

Suppose we have the following configs,

  overlay/configs/foo_defconfig

Our build sequence will be:

  $ cd overlay
  $ make O=../output/foo foo_defconfig
  $ make O=../output/foo

With either Thomas's patch or our local patch, other targets supported by
buildroot, such as menuconfig, help, etc also works under overlay/ as they do
under buildroot/.

##### overlay/Makefile #######
EXTERNAL_OVERLAY       ?= $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
export EXTERNAL_OVERLAY

BUILDROOT_TOP           = ../buildroot

all:
        ln -fs ../overlay $(BUILDROOT_TOP)
        make -C $(BUILDROOT_TOP)

%:
        ln -fs ../overlay $(BUILDROOT_TOP)
        make -C $(BUILDROOT_TOP) $(MAKECMDGOALS)

##### overlay/local.mk #######
-include overlay/package/*/*.mk
-include overlay/package/*/*/*.mk

-include overlay/cust/*/*.mk
-include overlay/cust/*/*/*.mk

-include overlay/linux/*.mk

###### overlay/Config.in ######
source "overlay/package/Config.in"
source "overlay/cust/Config.in"

###### overlay/package/Config.in ######
source "overlay/package/xxx/Config.in"


Thanks.

Roy

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 3/3] docs/manual: add explanations about BR2_EXTERNAL
  2013-09-12 21:46   ` Arnout Vandecappelle
@ 2013-09-13  6:53     ` Thomas Petazzoni
  0 siblings, 0 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-13  6:53 UTC (permalink / raw)
  To: buildroot

Dear Arnout Vandecappelle,

On Thu, 12 Sep 2013 23:46:22 +0200, Arnout Vandecappelle wrote:

> > ++BR2_EXTERNAL+ is an environment variable that one can use to point to
> > +a directory that contains Buildroot customizations. This environment
> > +variable must be passed everytime a Buildroot +make+ command is
> > +invoked, be it at configuration time (+make menuconfig+, +make
> > +xconfig+, etc.), at build time (+make+) or any other Buildroot command
> > +(+make source+, +make legal-info+, etc.).
> 
>   Hang on... It's stored in the .config, right? So no need to pass it 
> every time?

No, it is *not* stored in the .config. See other parts of the thread.

>   In fact, if the config option would get a prompt, you could even enter 
> it through the config instead of through the environment. The only reason 
> to pass it through the environment is to be able to list the available 
> defconfigs.

No, that's not the only reason. In Config.in, we are sourcing
$(BR2_EXTERNAL)/Config.in, so we need to know the value of
$(BR2_EXTERNAL) before running menuconfig/xconfig.

If BR2_EXTERNAL is just a Config.in option, you have a chicken-and-egg
problem: you need its value before running menuconfig, but to define
its value, you need to run menuconfig.

The BR2_EXTERNAL Config.in option is *only* here to "transfer" the
environment variable value into a Config.in option so that Config.in
files can use $BR2_EXTERNAL to reference other Config.in files. That's
the only reason why we have this BR2_EXTERNAL Config.in option. And as
discussed previously, the value of this option is not even stored in
the .config file.

> > +To achieve this, it is recommended but not mandatory, to store those
> > +   details in directories called +board/<boardname>/+ under
> 
>   You use someboard instead of <boardname> earlier.

Will fix, thanks.


> > +------
> > +menu "<somecompany> packages"
> > +
> > +source "$BR2_EXTERNAL/package/package1/Config.in"
> > +source "$BR2_EXTERNAL/package/package2/Config.in"
> 
>   Wow, does this work?

Are you sure you read/understand the BR2_EXTERNAL completely? :-)

The example above is an example of a $(BR2_EXTERNAL)/Config.in file.
This file is the only one that gets conditionally included (i.e
included when BR2_EXTERNAL is set, not included when BR2_EXTERNAL is
not set).

The Config.in files included by $(BR2_EXTERNAL)/Config.in are the ones
added by the user in his external directory, so obviously he will only
be listing Config.in files that really exist, just like we do in
Buildroot.

There must be something really not clear in the documentation I've
written, because it seems you did not get how it was all working. Do
not hesitate to point out what was causing confusion, so that I can
improve the wording of the documentation.

Maybe you should look at the directory/file hierarchy example shown
below.

> Then actually, you don't need that generated 
> Config.in at all... Instead, you can add
> 
> source "$BR2_EXTERNAL/package/Config.in"
> 
> to the top of package/Config.in. And set a non-empty default for 
> BR2_EXTERNAL, e.g. $(TOPDIR)/support/dummy_external, which contains an 
> empty package/Config.in.

Humm, this however looks like a very interesting trick. I'll try this
out.

> > +In the end, a typical +BR2_EXTERNAL+ directory organization would
> > +generally be:
> > +
> > +-----
> > +??? Config.in
> > +??? external.mk
> > +??? board/
> > +?   ??? <someboard>/
> > +?       ??? overlay/
> > +?           ??? etc/
> > +?               ??? <some file>
> > +??? configs/
> > +?   ??? <some board>_defconfig
> > +??? package/
> > +    ??? Config.in
> > +    ??? package1/
> > +        ??? Config.in
> > +        ??? package1.mk
> > +    ??? package2/
> > +        ??? Config.in
> > +        ??? package2.mk

Have you had a look at this part of the documentation?

Thanks,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-13  6:43       ` Tzu-Jung Lee
@ 2013-09-13  7:10         ` Thomas Petazzoni
  2013-09-13  7:47           ` Tzu-Jung Lee
  0 siblings, 1 reply; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-13  7:10 UTC (permalink / raw)
  To: buildroot

Dear Tzu-Jung Lee,

On Fri, 13 Sep 2013 14:43:11 +0800, Tzu-Jung Lee wrote:

> >>   I'm not really convinced by the principle. The external.mk is exactly
> >> the same as the local override .mk; the Config.in appears at the very end
> >> of the top-level menu. Instead, I think we should enforce the buildroot
> >> hierarchy in the external dir, i.e.
> >>
> >> source <path-to-external-dir>/package/Config.in
> >>
> >> at the top of package/Config.in, and
> >>
> >> -include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk))
> >>
> >> in the top-level Makefile.
> >
> > This is what I had originally done, but it seemed to me that the
> > external stuff may wish to add other Kconfig options than just
> > packages. That said, I've done this BR2_EXTERNAL stuff mainly for
> > packages, so if people think that we should restrict this to packages,
> > I'm fine with that.
> >
> 
> We do want to support the absolute paths for both Config.in and *.mk.
> 
> As a "buildroot overlay", we have similar structures in overlay/ like
> the buildroot/,
> such as configs, fs, packages, etc.
> 
> This requires the buildroot to support only only the *.mk and
> Config.in in the top
> level over overlay/, but also those in their sub directories.
> 
> The *.mk case may be get rid of with Arnount's suggestion.
> But I'm wondering could we solve the Config.in case in a less trickier way?

I am not sure what you mean here. What do you mean by "support the
absolute paths for both Config.in and *.mk" ?

> The overlay/Makefile plays a trick, which allows us to work under overlay/ as we
> work under buildroot/
> 
> Suppose we have the following configs,
> 
>   overlay/configs/foo_defconfig
> 
> Our build sequence will be:
> 
>   $ cd overlay
>   $ make O=../output/foo foo_defconfig
>   $ make O=../output/foo
> 
> With either Thomas's patch or our local patch, other targets supported by
> buildroot, such as menuconfig, help, etc also works under overlay/ as they do
> under buildroot/.
> 
> ##### overlay/Makefile #######
> EXTERNAL_OVERLAY       ?= $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
> export EXTERNAL_OVERLAY
> 
> BUILDROOT_TOP           = ../buildroot
> 
> all:
>         ln -fs ../overlay $(BUILDROOT_TOP)
>         make -C $(BUILDROOT_TOP)
> 
> %:
>         ln -fs ../overlay $(BUILDROOT_TOP)
>         make -C $(BUILDROOT_TOP) $(MAKECMDGOALS)
> 
> ##### overlay/local.mk #######
> -include overlay/package/*/*.mk
> -include overlay/package/*/*/*.mk
> 
> -include overlay/cust/*/*.mk
> -include overlay/cust/*/*/*.mk
> 
> -include overlay/linux/*.mk
> 
> ###### overlay/Config.in ######
> source "overlay/package/Config.in"
> source "overlay/cust/Config.in"
> 
> ###### overlay/package/Config.in ######
> source "overlay/package/xxx/Config.in"

This is what BR2_EXTERNAL allows. Of course, doing a
BR2_EXTERNAL/Makefile that allows to run Buildroot from the external
(overlay) directory is something left for the person who creates the
overlay, I believe.

Best regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 18:21           ` Thomas Petazzoni
  2013-09-12 18:25             ` ANDY KENNEDY
  2013-09-12 21:51             ` Yann E. MORIN
@ 2013-09-13  7:35             ` Thomas De Schampheleire
  2013-09-13 15:55               ` Ryan Barnett
  2 siblings, 1 reply; 84+ messages in thread
From: Thomas De Schampheleire @ 2013-09-13  7:35 UTC (permalink / raw)
  To: buildroot

Hi Thomas,

On Thu, Sep 12, 2013 at 8:21 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Dear Thomas De Schampheleire,
>
> On Thu, 12 Sep 2013 09:54:56 +0200, Thomas De Schampheleire wrote:
>

>> The upstreaming work is currently done by one person (me) and this is
>> clearly the weak point. If I stop paying attention to upstreaming, or
>> to keeping the changes we make upstreamable, the delta between our
>> development repo and mainline buildroot becomes so large that it is a
>> nightmare to keep up with newer releases.
>
> Do you think there is something we can do at the Buildroot level to
> ease this process?

I don't think there is much to do about that. The buildroot community
is very open and active, so there is no real reason why others
couldn't do what I do. The 'time' aspect is the only hurdle I have
experienced in the past, in two ways:
1. upstreaming changes requires effort and time from the developer
side, in order to prepare the patch in the first place, send it, and
update after comments. All this in several cycles depending on the
comments. In a typical company mindset, upstreaming is not a first
priority, so these tasks go in-between other stuff.
Except for encouraging companies and other forks to upstream their
changes as much as possible, there is little the buildroot community
can do here.

2. sometimes patches get very little, if any, response. Especially in
the beginning of my contributions, this was very frustrating. I pinged
patches, re-sent them, even multiple times, and still not even a
comment was given. I can imagine that not everyone continues trying,
and several people will just give up, tagging the buildroot community
as 'not accepting patches'.
The situation has certainly improved since then, I think: the
introduction of patchwork helps keeping track of open patches, and
although I have not kept numbers I think the community certainly has
grown, and there are now several more people systematically reviewing
patches so that the burden does not fall entirely on Peter and
yourself.
I think we should still keep an eye on this though. I think it still
happens that patches are sent by 'new' people in the community, and
there is little or no reaction. Sometimes the patch does not really
fit in our general belief of how buildroot should be, but maybe we
don't always dare to say it. Or sometimes the patch is so specific
that it is hard to  give a good review, so one waits until someone
else with more experience in that area gives some comments, which may
never happen.
Ideally, patches should stay no longer than a fixed amount of time in
patchwork. Either the patch is given some comments and we
wait/encourage for the submitter to send an updated version, or we
reject the patch with some explanation, or we ask more details so we
can either accept/reject it with more background. This may not be
feasible for all patches. Sometimes there is simply no-one who really
needs the extra feature/fix except the submitter himself, but that is
not necessarily a reason not to accept the patch.

[..]
>
> Thanks a lot for this write-up. I think we should keep it somewhere in
> a section of the manual.

Thanks. I'm adding Samuel on this one.
If we add this to the manual, then maybe we should add some other ways
in which buildroot can be used: a number of recipes that work and from
which beginning users can choose or get ideas from.

Best regards,
Thomas

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-13  7:10         ` Thomas Petazzoni
@ 2013-09-13  7:47           ` Tzu-Jung Lee
  0 siblings, 0 replies; 84+ messages in thread
From: Tzu-Jung Lee @ 2013-09-13  7:47 UTC (permalink / raw)
  To: buildroot

Hi Thomas,

On Fri, Sep 13, 2013 at 3:10 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Dear Tzu-Jung Lee,
>
> On Fri, 13 Sep 2013 14:43:11 +0800, Tzu-Jung Lee wrote:
>
>> >>   I'm not really convinced by the principle. The external.mk is exactly
>> >> the same as the local override .mk; the Config.in appears at the very end
>> >> of the top-level menu. Instead, I think we should enforce the buildroot
>> >> hierarchy in the external dir, i.e.
>> >>
>> >> source <path-to-external-dir>/package/Config.in
>> >>
>> >> at the top of package/Config.in, and
>> >>
>> >> -include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk))
>> >>
>> >> in the top-level Makefile.
>> >
>> > This is what I had originally done, but it seemed to me that the
>> > external stuff may wish to add other Kconfig options than just
>> > packages. That said, I've done this BR2_EXTERNAL stuff mainly for
>> > packages, so if people think that we should restrict this to packages,
>> > I'm fine with that.
>> >
>>
>> We do want to support the absolute paths for both Config.in and *.mk.
>>
>> As a "buildroot overlay", we have similar structures in overlay/ like
>> the buildroot/,
>> such as configs, fs, packages, etc.
>>
>> This requires the buildroot to support only only the *.mk and
>> Config.in in the top
>> level over overlay/, but also those in their sub directories.
>>
>> The *.mk case may be get rid of with Arnount's suggestion.
>> But I'm wondering could we solve the Config.in case in a less trickier way?
>
> I am not sure what you mean here. What do you mean by "support the
> absolute paths for both Config.in and *.mk" ?
>
>> The overlay/Makefile plays a trick, which allows us to work under overlay/ as we
>> work under buildroot/
>>
>> Suppose we have the following configs,
>>
>>   overlay/configs/foo_defconfig
>>
>> Our build sequence will be:
>>
>>   $ cd overlay
>>   $ make O=../output/foo foo_defconfig
>>   $ make O=../output/foo
>>
>> With either Thomas's patch or our local patch, other targets supported by
>> buildroot, such as menuconfig, help, etc also works under overlay/ as they do
>> under buildroot/.
>>
>> ##### overlay/Makefile #######
>> EXTERNAL_OVERLAY       ?= $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
>> export EXTERNAL_OVERLAY
>>
>> BUILDROOT_TOP           = ../buildroot
>>
>> all:
>>         ln -fs ../overlay $(BUILDROOT_TOP)
>>         make -C $(BUILDROOT_TOP)
>>
>> %:
>>         ln -fs ../overlay $(BUILDROOT_TOP)
>>         make -C $(BUILDROOT_TOP) $(MAKECMDGOALS)
>>
>> ##### overlay/local.mk #######
>> -include overlay/package/*/*.mk
>> -include overlay/package/*/*/*.mk
>>
>> -include overlay/cust/*/*.mk
>> -include overlay/cust/*/*/*.mk
>>
>> -include overlay/linux/*.mk
>>
>> ###### overlay/Config.in ######
>> source "overlay/package/Config.in"
>> source "overlay/cust/Config.in"
>>
>> ###### overlay/package/Config.in ######
>> source "overlay/package/xxx/Config.in"
>
> This is what BR2_EXTERNAL allows. Of course, doing a
> BR2_EXTERNAL/Makefile that allows to run Buildroot from the external
> (overlay) directory is something left for the person who creates the
> overlay, I believe.


By the absolute path, I mean the paths of sub Config.in included by the
BR2_EXTERNAL/Config.in, not the path of itself.

For example, suppose we have private packages in the overlay

  overlay/Config.in
  overlay/packages/foo/Config.in
  overlay/packages/bar/Config.in

The overlay/Config.in can't include them without support of absolute paths

  source "overlay/packages/foo/Config.in"
  source "overlay/packages/bar/Config.in"

In ths case, Buildroot tries to include them from the

  myproj/buildroot/overlay/packages/foo/Config.in

instead of

  myproj/overlay/packages/foo/Config.in

Thanks.

Roy

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-13  7:35             ` Thomas De Schampheleire
@ 2013-09-13 15:55               ` Ryan Barnett
  0 siblings, 0 replies; 84+ messages in thread
From: Ryan Barnett @ 2013-09-13 15:55 UTC (permalink / raw)
  To: buildroot

Thomas De Schampheleire <patrickdepinguin@gmail.com> wrote on 
09/13/2013 02:35:04 AM:

> Hi Thomas,
> 
> On Thu, Sep 12, 2013 at 8:21 PM, Thomas Petazzoni
> <thomas.petazzoni@free-electrons.com> wrote:
> > Dear Thomas De Schampheleire,
> >
> > On Thu, 12 Sep 2013 09:54:56 +0200, Thomas De Schampheleire wrote:
> >
> 
> >> The upstreaming work is currently done by one person (me) and this is
> >> clearly the weak point. If I stop paying attention to upstreaming, or
> >> to keeping the changes we make upstreamable, the delta between our
> >> development repo and mainline buildroot becomes so large that it is a
> >> nightmare to keep up with newer releases.
> >
> > Do you think there is something we can do at the Buildroot level to
> > ease this process?
> 
> I don't think there is much to do about that. The buildroot community
> is very open and active, so there is no real reason why others
> couldn't do what I do. The 'time' aspect is the only hurdle I have
> experienced in the past, in two ways:
> 1. upstreaming changes requires effort and time from the developer
> side, in order to prepare the patch in the first place, send it, and
> update after comments. All this in several cycles depending on the
> comments. In a typical company mindset, upstreaming is not a first
> priority, so these tasks go in-between other stuff.
> Except for encouraging companies and other forks to upstream their
> changes as much as possible, there is little the buildroot community
> can do here.
> 
> 2. sometimes patches get very little, if any, response. Especially in
> the beginning of my contributions, this was very frustrating. I pinged
> patches, re-sent them, even multiple times, and still not even a
> comment was given. I can imagine that not everyone continues trying,
> and several people will just give up, tagging the buildroot community
> as 'not accepting patches'.

As being someone who is rather new member of the community, I guess 
I've received almost quite the opposite reaction from the community. 
When posting patches back to mailing list I've received good feedback
that has been very critical and much better than anything our company
has been able to do internally. I've even made my biggest issue known
and in attempt for comment for comments on how I could come up with 
something to fix the problem - Thomas Petazzoni addressed it. So
in a little way I feel great about the discussion I've spawned.

> The situation has certainly improved since then, I think: the
> introduction of patchwork helps keeping track of open patches, and
> although I have not kept numbers I think the community certainly has
> grown, and there are now several more people systematically reviewing
> patches so that the burden does not fall entirely on Peter and
> yourself.

I'm going to start a new discussion thread - [RFC] Effective Patchwork 
Use and Patch Review - on my thoughts about the review process and
I how I'm finding it difficult to use. 

> I think we should still keep an eye on this though. I think it still
> happens that patches are sent by 'new' people in the community, and
> there is little or no reaction. Sometimes the patch does not really
> fit in our general belief of how buildroot should be, but maybe we
> don't always dare to say it. Or sometimes the patch is so specific
> that it is hard to  give a good review, so one waits until someone
> else with more experience in that area gives some comments, which may
> never happen.
> Ideally, patches should stay no longer than a fixed amount of time in
> patchwork. Either the patch is given some comments and we
> wait/encourage for the submitter to send an updated version, or we
> reject the patch with some explanation, or we ask more details so we
> can either accept/reject it with more background. This may not be
> feasible for all patches. Sometimes there is simply no-one who really
> needs the extra feature/fix except the submitter himself, but that is
> not necessarily a reason not to accept the patch.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130913/997f042d/attachment.html>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-12 22:11               ` Ryan Barnett
@ 2013-09-13 20:56                 ` Arnout Vandecappelle
  2013-09-14  5:29                   ` Thomas Petazzoni
  0 siblings, 1 reply; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-13 20:56 UTC (permalink / raw)
  To: buildroot

On 13/09/13 00:11, Ryan Barnett wrote:
> Arnout Vandecappelle <arnout@mind.be> wrote on 09/12/2013 04:57:04 PM:
>
>  > On 12/09/13 23:51, Ryan Barnett wrote:
>  > >  > > In order to utilize the BR2_EXTERNAL feature I must have
> BR2_EXTERNAL
>  > >  > > either exported into my environment or be called as
>  > >  >
>  > >  >   The Makefile exports it in the environment of the Kconfig
> targets. So
>  > >  > once it is in the .config, it will stay there. Try it and you'll
> see :-)
>  > >
>  > > I have looked as I'm experiment with this and it definitely isn't
> there :)
>  > > Also according to the documentation you need to define it every time :)
>  > >
>  >
>  >   Ah, yes indeed, sorry about that - I was trying to be too smart.
>
> Happens to the best of us.
>
>  >   To save it in the .config, it needs a prompt, and to be able to take it
>  > from the environment it needs a helper variable. Like BR2_DEFCONFIG.
>
> I like to view BR2_EXTERNAL as something that is similar to "O=" which means
> that I have the ability to change it at a moments notice. However, like it
> is done in mkmakefile when doing the following from within buildroot
> toplevel
> source directory:
>
> make O=/path/to/build defconfig
>
> O= is stored in the generated makefile (as you know). However, it gets very
> annoying to type BR2_EXTERNAL=/path/to/external and I don't always want to
> export it as shell environment variable. Thus, adding that line to
> mkmakefile is handy since usually when you specify O= you are doing a
> specific build which BR2_EXTERNAL would definitely be a part of.

  My point is: it should (and can) be made part of the .config. It really 
has to be part of the .config, because some options in the .config will 
refer to the packages that are defined in the external directory.

  Regards,
  Arnout


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 22:12                   ` Yann E. MORIN
@ 2013-09-13 21:50                     ` Arnout Vandecappelle
  2013-09-14 22:16                       ` Yann E. MORIN
  0 siblings, 1 reply; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-13 21:50 UTC (permalink / raw)
  To: buildroot

On 13/09/13 00:12, Yann E. MORIN wrote:
> On 2013-09-13 00:04 +0200, Arnout Vandecappelle spake thusly:
[snip]
>> but the GPL is pretty
>> clear on this:
>>
>> "If identifiable sections of that work are not derived from the Program,
>> and can be reasonably considered independent and separate works in
>> themselves, then this License, and its terms, do not apply to those
>> sections when you distribute them as separate works."
>>
>>   i.e. you can distribute the source of buildroot itself separately from your
>> external directory.
>
> Yes, but I believe BR2_EXTERNAL *is* a derived work of Buildroot, so as
> such should be licensed under a license compatible with Buildroot's.
>
>>   As long as your external stuff merely aggregates with the GPL'd stuff under
>> buildroot, there shouldn't be an issue.
>
> But that's not aggregation in my opinion, since it does leverage all or
> parts of the Buildroot infrastrucutre, and was clearly written with this
> intent, and as such can not be considered mere aggregation.
>
> Of course, all this only applies _if and when_ BR2_EXTERNAL gets
> distributed to a third party.

  The more I think about it, the more confused I get :-) Although your 
other reply to Andy sums things up pretty clearly.

  Let me try out a few scenarios (I'm making things up as I go here).

  I have made some changes to buildroot, and I have also made an external 
tree.


1. I want to distribute the modified buildroot tree to someone. Do I also 
have to make the external one available?

  => No, because the buildroot tree in fact doesn't refer to the external 
tree. You run "BR2_EXTERNAL=... make".


2. I distribute a rootfs which contains a GPL program (bash). Do I have 
to make the buildroot tree available?

  => Yes, because I have to make the build scripts for bash available, 
and buildroot is the build script that I've used.


3. I use buildroot to build lua. I copy the lua executable out of the 
target/ tree and distribute it. Do I have to make the buildroot tree 
available?

  => No, because lua is MIT licensed.


4. I distribute a rootfs which contains a GPL program (bash). It also 
contains a proprietary program (foo). I have added a foo.mk file to the 
buildroot tree to build my proprietary program. Do I have to make the 
modified buildroot tree available?

  => Probably not. I have to make the build script for bash available, 
but the original buildroot tree already does the job.

  I believe that this reasoning holds regardless of whether the foo.mk is 
added directly in the buildroot tree or through BR2_EXTERNAL (or through 
override.mk).


5. I add a proprietary binary to the default skeleton and distribute the 
rootfs built by buildroot. Do I have to make the modified buildroot with 
the proprietary binary available?

  => I don't think so, because the proprietary binary is merely 
aggregated with the rest of the buildroot-generated stuff.


6. Can I give the buildroot tree + the external tree to someone else?

  => Yes, but only under the GPL - the GPL applies to the external tree 
as well.



  After thinking about it this much, it looks like the buildroot license 
is a lot more lenient than I first thought. But of course, I don't really 
now.


  Maybe we should organize a discussion about this in the legal track at 
FOSDEM.


  Regards,
  Arnout
-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL
  2013-09-13 20:56                 ` Arnout Vandecappelle
@ 2013-09-14  5:29                   ` Thomas Petazzoni
  0 siblings, 0 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-14  5:29 UTC (permalink / raw)
  To: buildroot

Dear Arnout Vandecappelle,

On Fri, 13 Sep 2013 22:56:59 +0200, Arnout Vandecappelle wrote:

> > O= is stored in the generated makefile (as you know). However, it gets very
> > annoying to type BR2_EXTERNAL=/path/to/external and I don't always want to
> > export it as shell environment variable. Thus, adding that line to
> > mkmakefile is handy since usually when you specify O= you are doing a
> > specific build which BR2_EXTERNAL would definitely be a part of.
> 
>   My point is: it should (and can) be made part of the .config. It really 
> has to be part of the .config, because some options in the .config will 
> refer to the packages that are defined in the external directory.

I believe it cannot be part of the .config, because there is a
chicken-and-egg problem due to the fact that running 'make menuconfig'
requires to already know the BR2_EXTERNAL value.

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-13 21:50                     ` Arnout Vandecappelle
@ 2013-09-14 22:16                       ` Yann E. MORIN
  2013-09-16 15:43                         ` ANDY KENNEDY
                                           ` (2 more replies)
  0 siblings, 3 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-14 22:16 UTC (permalink / raw)
  To: buildroot

Arnout, All,

Once again, I am not a lawyer, and the below is not legal advice.
Anyone sane would consult a lawyer for a definitive legal counsel.

On 2013-09-13 23:50 +0200, Arnout Vandecappelle spake thusly:
> On 13/09/13 00:12, Yann E. MORIN wrote:
> >On 2013-09-13 00:04 +0200, Arnout Vandecappelle spake thusly:
> [snip]
> >>but the GPL is pretty
> >>clear on this:
> >>
> >>"If identifiable sections of that work are not derived from the Program,
> >>and can be reasonably considered independent and separate works in
> >>themselves, then this License, and its terms, do not apply to those
> >>sections when you distribute them as separate works."
> >>
> >>  i.e. you can distribute the source of buildroot itself separately from your
> >>external directory.
> >
> >Yes, but I believe BR2_EXTERNAL *is* a derived work of Buildroot, so as
> >such should be licensed under a license compatible with Buildroot's.
> >
> >>  As long as your external stuff merely aggregates with the GPL'd stuff under
> >>buildroot, there shouldn't be an issue.
> >
> >But that's not aggregation in my opinion, since it does leverage all or
> >parts of the Buildroot infrastrucutre, and was clearly written with this
> >intent, and as such can not be considered mere aggregation.
> >
> >Of course, all this only applies _if and when_ BR2_EXTERNAL gets
> >distributed to a third party.
> 
>  The more I think about it, the more confused I get :-) Although your other
> reply to Andy sums things up pretty clearly.
> 
>  Let me try out a few scenarios (I'm making things up as I go here).
> 
>  I have made some changes to buildroot, and I have also made an external
> tree.
> 
> 
> 1. I want to distribute the modified buildroot tree to someone. Do I also
> have to make the external one available?
> 
>  => No, because the buildroot tree in fact doesn't refer to the external
> tree. You run "BR2_EXTERNAL=... make".

Agreed, I think.

> 2. I distribute a rootfs which contains a GPL program (bash). Do I have to
> make the buildroot tree available?
> 
>  => Yes, because I have to make the build scripts for bash available, and
> buildroot is the build script that I've used.

Yes, because of section 3 of the GPL this program is licensed under.

Although strict compliance does not _require_ you to distribute your
Buildroot tree (since by giving the 'make' commands would be enough),
giving your Buildroot tree makes this so much easy that you would
probably want to do that rather than extract the commands run by
Buildroot.

> 3. I use buildroot to build lua. I copy the lua executable out of the
> target/ tree and distribute it. Do I have to make the buildroot tree
> available?
> 
>  => No, because lua is MIT licensed.

Indeed, no. But that does not preclude any other reason why you would
have to distribute your Buildroot tree (eg. case 2, above).

> 4. I distribute a rootfs which contains a GPL program (bash). It also
> contains a proprietary program (foo). I have added a foo.mk file to the
> buildroot tree to build my proprietary program. Do I have to make the
> modified buildroot tree available?
> 
>  => Probably not. I have to make the build script for bash available, but
> the original buildroot tree already does the job.
> 
>  I believe that this reasoning holds regardless of whether the foo.mk is
> added directly in the buildroot tree or through BR2_EXTERNAL (or through
> override.mk).

These are muddy waters.

If the unmodified Buildroot tree is enough to rebuild the GPL program,
then I would not see any valid reason to object.

But you'd have to have a *very good* process that ensures that your
Buildroot modifications do *not* impact the build of the GPL program.
A very good process, indeed, as soon as your team is more than a (very)
few people.

> 5. I add a proprietary binary to the default skeleton and distribute the
> rootfs built by buildroot. Do I have to make the modified buildroot with the
> proprietary binary available?
> 
>  => I don't think so, because the proprietary binary is merely aggregated
> with the rest of the buildroot-generated stuff.

Same answer as case 4, above. Be sure to have a very good process.

> 6. Can I give the buildroot tree + the external tree to someone else?
> 
>  => Yes, but only under the GPL - the GPL applies to the external tree as
> well.

(Note: when I say 'BR2_EXTERNAL', I'm speaking about the content of the
directory pointed to by the value of the variable BR2_EXTERNAL, unless
otherwise stated.)

That's all I was arguing about: BR2_EXTERNAL is a derived work of
Buildroot, so is bound to the same licensing terms as Buildroot is.

Since Buildroot's license is the GPLv2, BR2_EXTERNAL is covered by the
GPLv2.

Since the GPLv2 is a license which terms apply at the time of
distribution, as long as you do not distribute BR2_EXTERNAL, you are
free to do whatever you want with BR2_EXTERNAL. But as soon as you
distribute BR2_EXTERNAL (either because you decide to do so on your own
will, or because you are required to, as in case 2, above), you are
bound to distribute it under the terms of the GPLv2 (or arguably under a
license that is compatible with the GPLv2, eg. BSD).


Now let me add a few more cases:

7. I add a new package to Buildroot, for a GPL program, but do so in
   BR2_EXTERNAL.

   Do I have to distribute my BR2_EXTERNAL?
   Do I have to distribute my Buildroot tree?

=> Yes to both questions, for the same reasons as case 2, above.


8. My BR2_EXTERNAL contains the package described in case 7, above, plus
   a package for a proprietary program.

   Can I expunge the package for the proprietary program from BR2_EXTERNAL
   before I distribute it?

=> Yes, this is the same as cases 4 and 5, above.

====

Also, I was wondering if we could not have BR2_EXTERNAL (the variable)
be a list of external directories (colon-separated, a-la PATH)?

I would use it that way:
    BR2_EXTERNAL="/path/to/my/local/GPL/packages"
    BR2_EXTERNAL+=":/path/to/my/proprietary/packages"
    export BR2_EXTERNAL
    make ....

This would even make it much easier to separate proprietary packages, so
they do not leak, while making it easy to comply for GPL-like packages.

Thoughts?

====

>  After thinking about it this much, it looks like the buildroot license is a
> lot more lenient than I first thought. But of course, I don't really now.

I don't believe you could call the GPLv2 'lenient'. In fact I would call
it anything but lenient: anything that is a derived work of Buildroot is
covered by its license.

Note: the target rootfs is *not* a derived work of Buildroot.

>  Maybe we should organize a discussion about this in the legal track at
> FOSDEM.

Yes, that would make for a very good case on the (L)GPL.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-12 22:47                     ` Yann E. MORIN
@ 2013-09-15 13:18                       ` Thomas De Schampheleire
  0 siblings, 0 replies; 84+ messages in thread
From: Thomas De Schampheleire @ 2013-09-15 13:18 UTC (permalink / raw)
  To: buildroot

On Fri, Sep 13, 2013 at 12:47 AM, Yann E. MORIN <yann.morin.1998@free.fr>
wrote:
> Andy, All,
>
> On 2013-09-12 22:28 +0000, ANDY KENNEDY spake thusly:
[..]
> What I'm arguing is that the content of BR2_EXTERNAL that _interacts
> with Buildroot's internal infrastructure_ *are* a derived work of
> Buildroot.
>
> Let's take a (very simplistic) example:
>
> BR2_EXTERNAL/
> package/
> pkg-1/
> Config.in *
> pkg-1.mk *
> pkg-1-main.c -
> pkg-1.h -
>
> * : a derived work of Buildroot
> - : not a derived work of Buildroot
>
> Config.in and pkg-1.mk are clearly (in my opinion) a derived work of
> Buildroot, since they are written with the very intent to be interacting
> with Buildroot's internal infrastructure.
>
> But pkg-1-main.c and pkg-1.h (which are the C sources of pkg-1) are *not*
> a derived work of Buildroot, and thus can well be under whatever license.

I agree with Yann here: the location of files is not relevant in this case:
clearly the .mk and Config files derive from buildroot. The .mk file would
use infrastructure like generic-package, and define setting such as
FOO_SOURCE, FOO_DEPENDENCIES, specifically to work with buildroot's core
infrastructure. This means that these derived files also become GPL.

Things would be different if we decide that the generic-package and other
infrastructures are an interface to buildroot (which I don't believe they
are). This is similar to why user-space applications running under the
Linux kernel (GPLv2) are not automatically GPLv2 too: the system call
interface is considered the standard interface between the kernel and
applications.

Regarding Andy's argument about making money: I have no objections about
someone selling a product made with buildroot. Same for creating a derived
build system, then selling it for big money. However, while doing so, the
gpl license must be honored, so source code of buildroot must be
distributed. As for anything in the gpl world, this means that purely
selling a product (the derived build system) doesn't make a lot of sense,
as any of your clients can distribute it freely. Instead, the value is now
in the innovation and service you can provide. On both aspects, the
buildroot community itself is already doing a great job at this for free,
so there is little value in forking buildroot for money IMO.


Best regards,
Thomas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130915/068ff317/attachment.html>

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-14 22:16                       ` Yann E. MORIN
@ 2013-09-16 15:43                         ` ANDY KENNEDY
  2013-09-16 17:30                           ` Yann E. MORIN
  2013-09-16 16:21                         ` [Buildroot] Is GPLv2 the right license for Buildroot? Thomas Petazzoni
  2013-09-16 18:56                         ` [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization Arnout Vandecappelle
  2 siblings, 1 reply; 84+ messages in thread
From: ANDY KENNEDY @ 2013-09-16 15:43 UTC (permalink / raw)
  To: buildroot

> From: Yann E. MORIN [mailto:yann.morin.1998 at gmail.com] On Behalf Of Yann E. MORIN
> Sent: Saturday, September 14, 2013 5:16 PM

Everything you guys said here was sound, logical reasoning.  This is
what I believe to be the spirit of what *some* in the free software community
intended (though there are a few radicals out there which have taken it
down a different road).

<snip>
> > >Yes, but I believe BR2_EXTERNAL *is* a derived work of Buildroot, so as
> > >such should be licensed under a license compatible with BuildRoot's.

About this:  There was a BIG case here in the States within the last
two years.  Google vs. Sun Micro systems.  The argument was over the header
files of the language Java (if you already know this, sorry for the recap).
It was decided that an INTERFACE is not protected by _anything_.  So,
from a certain point of view, the *.mk files contain various variables
and then make a FUNCTION call back into the system.  This would negate there
being a "derived work" for anyone adding on an IP app to the build system.

However, you are dead-on about the GPL apps that may be built that way as
one would ABSOLUTELY have to release the build process with the binary.

So, whether this would work in courts across the globe, I have no idea.
Ethically speaking (and I'm big on ethics), I would not want to release IP
code that could _ONLY_ be built using BuildRoot, however, adding something
in that doesn't DEPEND on being built by BuildRoot is clearly okay by
our license and the GPL under which BuildRoot is released.

Now, as Yann has stated previously: the information above and 1.25USD will
buy you a Coke!

Andy

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-14 22:16                       ` Yann E. MORIN
  2013-09-16 15:43                         ` ANDY KENNEDY
@ 2013-09-16 16:21                         ` Thomas Petazzoni
  2013-09-16 17:08                           ` Yann E. MORIN
  2013-09-16 21:12                           ` Peter Korsgaard
  2013-09-16 18:56                         ` [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization Arnout Vandecappelle
  2 siblings, 2 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-16 16:21 UTC (permalink / raw)
  To: buildroot

Hello,

On Sun, 15 Sep 2013 00:16:13 +0200, Yann E. MORIN wrote:

> Since Buildroot's license is the GPLv2, BR2_EXTERNAL is covered by the
> GPLv2.

Probably going to make waves, but I'm wondering if the GPLv2 is the
right license for Buildroot. I believe it is not very easy to
understand how the terms of the GPL apply to something such as a build
system, and I am not sure that the GPL copyleft requirements are really
benefiting to Buildroot in any way. I am pretty sure that the vast
majority of companies using Buildroot are not really realizing it's
licensed under the GPL and therefore are not complying with the
Buildroot license terms (while they probably do realize that the
kernel, U-Boot, etc. are under the GPL and comply with their terms). Of
course that's not an argument to change the license, but I believe it
also highlights how hard it is to understand the GPL requirements on
the Buildroot case.

So, I believe that we should either:

 (1) Clarify and document how we believe the GPL terms apply to
     Buildroot (this would probably be a long discussion process, in
     which the SFLC should probably participate). When I see the
     discussions around BR2_EXTERNAL where the package .mk files and
     Config.in files may be seen as derivative work, but not the root
     filesystem overlay, or that package .mk files for GPL packages
     should be under the GPL, but not necessarily .mk files for non-GPL
     packages, I believe it is way too complicated for users. To me, it
     seems like complying with the Buildroot license is more
     complicated than using Buildroot itself, which is kind of silly.

 (2) Change the Buildroot license to a non-copyleft license. Of course,
     that requires contacting a lot of people, but maybe not so much:
     over the last 3-4 years, the vast majority of the Buildroot code
     base has been rewritten, and many of the people having worked on
     that are still around today.

Thoughts?

What other build systems are doing:

 * Yocto/OpenEmbeded: bitbake is under GPLv2, the rest (package
   recipes) is under MIT.

 * PTXdist is under GPLv2, but has a small license clarification "Note:
   PTXdist is a build system which generates a distribution for
   embedded systems. This license does only cover the build system
   itself and doesn't affect the license of managed software in any
   way, even if it might be distributed together with the build
   system." I believe it doesn't really clarify completely how the GPL
   applies to a build system.

 * OpenBricks is under GPLv2.

 * OpenWRT is under GPLv2, since it is originally a fork of Buildroot.

 * LTIB is under GPLv2.

Any other build system around worth having a look at?

Best regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 16:21                         ` [Buildroot] Is GPLv2 the right license for Buildroot? Thomas Petazzoni
@ 2013-09-16 17:08                           ` Yann E. MORIN
  2013-09-16 17:45                             ` ANDY KENNEDY
                                               ` (4 more replies)
  2013-09-16 21:12                           ` Peter Korsgaard
  1 sibling, 5 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-16 17:08 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2013-09-16 18:21 +0200, Thomas Petazzoni spake thusly:
> On Sun, 15 Sep 2013 00:16:13 +0200, Yann E. MORIN wrote:
> 
> > Since Buildroot's license is the GPLv2, BR2_EXTERNAL is covered by the
> > GPLv2.
> 
> Probably going to make waves,

Probably, yes. ;-)

> but I'm wondering if the GPLv2 is the
> right license for Buildroot. I believe it is not very easy to
> understand how the terms of the GPL apply to something such as a build
> system, and I am not sure that the GPL copyleft requirements are really
> benefiting to Buildroot in any way. I am pretty sure that the vast
> majority of companies using Buildroot are not really realizing it's
> licensed under the GPL and therefore are not complying with the
> Buildroot license terms (while they probably do realize that the
> kernel, U-Boot, etc. are under the GPL and comply with their terms).

On the other hand, the GPLv2 only applies at the time of distribution.
So long as the Buildroot tre is not distributed, there is no reason to
fear anything.

Now, let's try to make things clear:

  - on an embedded system, the probability that there is a GPL program
    is rather high (eg. busybox, the Linux kernel);

  - lets assume Buildroot is used to build those programs;

  - the GPL (as applied to _those_ programs, not Buildroot) mandates
    that the script to control compilation and installation of those
    programs be made available (section of GPLv2);

  - so the easiest way to comply with those programs' GPL is to
    distribute the Buildroot tree that was used to build the target
    filesystem, since it does contain all required recipes (aka the
    scripts of section 3 of the GPLv2)

  - Buildroot is itself GPLv2, so by distributing the Buildroot tree, a
    company has to release it under GPLv2.

> Of
> course that's not an argument to change the license, but I believe it
> also highlights how hard it is to understand the GPL requirements on
> the Buildroot case.

Sorry, but it is very clear to me, and I am no lawyer. And any decent
company will have a rather decent team of lawyers to help in these types
of cases.

> So, I believe that we should either:
> 
>  (1) Clarify and document how we believe the GPL terms apply to
>      Buildroot (this would probably be a long discussion process, in
>      which the SFLC should probably participate). When I see the
>      discussions around BR2_EXTERNAL where the package .mk files and
>      Config.in files may be seen as derivative work, but not the root
>      filesystem overlay, or that package .mk files for GPL packages
>      should be under the GPL,

It all revolves around the definition of a "derivative work".

We have to decide whether BR2_EXTERNAL is, or parts of it are, a derived
work of Buildroot. I think you now know my position, I guess. ;-)

>      but not necessarily .mk files for non-GPL
>      packages,

Wrong. *If* they are distributed, they'll be under the GPLv2.
But since they build proprietary (or weak-copyleft licensed) packages,
it is _not_ required that they be distributed.

>      I believe it is way too complicated for users. To me, it
>      seems like complying with the Buildroot license is more
>      complicated than using Buildroot itself, which is kind of silly.


>  (2) Change the Buildroot license to a non-copyleft license.

That would be a *hard* thing to do, I'm afraid.

>      Of course,
>      that requires contacting a lot of people, but maybe not so much:
>      over the last 3-4 years, the vast majority of the Buildroot code
>      base has been rewritten, and many of the people having worked on
>      that are still around today.
> 
> Thoughts?

I lean toward an explanation in the manual (with proper disclaimer that
entice the user to seek legal counsel).

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-16 15:43                         ` ANDY KENNEDY
@ 2013-09-16 17:30                           ` Yann E. MORIN
  2013-09-16 18:26                             ` Thomas Petazzoni
  0 siblings, 1 reply; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-16 17:30 UTC (permalink / raw)
  To: buildroot

Andy, All,

On 2013-09-16 15:43 +0000, ANDY KENNEDY spake thusly:
> > From: Yann E. MORIN [mailto:yann.morin.1998 at gmail.com] On Behalf Of Yann E. MORIN
> > Sent: Saturday, September 14, 2013 5:16 PM
> 
> Everything you guys said here was sound, logical reasoning.  This is
> what I believe to be the spirit of what *some* in the free software community
> intended (though there are a few radicals out there which have taken it
> down a different road).
> 
> <snip>
> > > >Yes, but I believe BR2_EXTERNAL *is* a derived work of Buildroot, so as
> > > >such should be licensed under a license compatible with BuildRoot's.
> 
> About this:  There was a BIG case here in the States within the last
> two years.  Google vs. Sun Micro systems.

Yes, that story has crossed the ocean. ;-)

>  The argument was over the header
> files of the language Java (if you already know this, sorry for the recap).
> It was decided that an INTERFACE is not protected by _anything_.

That's where we can argue: is the Buildroot-specific infrastructure an
interface, or is it not an interface.

That's the same argument that applies to kernel modules: if a module is
written explicitly for the Linux kernel, then some kernel developpers
believe that module is a derived work of the Linux kernel. If the module
is pre-existing, and merely ported over to the Linux interfaces, it
might not be a derived work.

Although this is still considered a "gray area", and has not been tried
yet, so we can't use that as anything but a guideline of thought.

>  So,
> from a certain point of view, the *.mk files contain various variables
> and then make a FUNCTION call back into the system.  This would negate there
> being a "derived work" for anyone adding on an IP app to the build system.

I think you are confused by your "IP app" and the "recipes to build your
IP app".

Of course your proprietary application is not covered by the Buildroot
license. So yes, you can bundle it in your rootfs, and not be bound to
provide a means to rebuild it.

> However, you are dead-on about the GPL apps that may be built that way as
> one would ABSOLUTELY have to release the build process with the binary.

Yes, this is section 3 of the GPLv2. Excerpt:

    ---8<---
    For an executable work, complete source
    code means all the source code for all modules it contains, plus any
    associated interface definition files, plus the scripts used to
    control compilation and installation of the executable.
    ---8<---

So, if you distribute a binary of busybox on your device, you have to
provide the recipient of that device with:

  - the source code of busybox itself (ie the .c and .h files)

  - the build instructions to reproduce that busybox binary

To fulfill that second point, you have two options:

  - provide your Buildroot tree
or
  - provide the exact commands to rebuild busybox

Since the former is way easier than the latter, you'd probably opt for
providing the Buildroot tree.

Now, if your Buildroot tree also contains recipes for proprietary
application (what you call "IP app"), you can well expunge your Buildroot
tree from those recipes, and distribute that expunged Buildroot tree to
the recipient of your device, since that expunged Buildroot tree is
sufficient to rebuild the aforementioned busybox binary.

Indeed, that's not the exact Buildroot tree used to build busybox, but
since it is absolutely sufficient, that would not be a problem at all.

But expunging the recipes for the proprietary app would need a proper
process that guarantees it does not "leak" changes to other recipes for
non-proprietary apps.

Enters now BR2_EXTERNAL. If your BR2_EXTERNAL only contains recipes for
proprietary applications, and there are none in your Buildroot tree, you
will *not* have to provide that BR2_EXTERNAL tree@all.

But if your BR2_EXTERNAL tree contains recipes for GPL applications that
end up in your device, you will *have* to provide *those* recipes.

Ditto for the Buildroot tree, you may expunge the recipes for your
proprietary apps from the BR2_EXTERNAL tree you distribute, since they
are not required to rebuild the GPL applications.

> So, whether this would work in courts across the globe, I have no idea.
> Ethically speaking (and I'm big on ethics), I would not want to release IP
> code that could _ONLY_ be built using BuildRoot, however, adding something
> in that doesn't DEPEND on being built by BuildRoot is clearly okay by
> our license and the GPL under which BuildRoot is released.

OK, so you basically said there is no problem. Good! :-)

> Now, as Yann has stated previously: the information above and 1.25USD will
> buy you a Coke!

Indeed, the above would have to be tried in a court of law.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 17:08                           ` Yann E. MORIN
@ 2013-09-16 17:45                             ` ANDY KENNEDY
  2013-09-16 18:01                               ` Thomas Petazzoni
  2013-09-16 17:58                             ` Thomas Petazzoni
                                               ` (3 subsequent siblings)
  4 siblings, 1 reply; 84+ messages in thread
From: ANDY KENNEDY @ 2013-09-16 17:45 UTC (permalink / raw)
  To: buildroot

> From: Yann E. MORIN [mailto:yann.morin.1998 at gmail.com] On Behalf Of Yann E. MORIN
> Sent: Monday, September 16, 2013 12:08 PM
> 
> Thomas, All,
> 
> On 2013-09-16 18:21 +0200, Thomas Petazzoni spake thusly:
> > On Sun, 15 Sep 2013 00:16:13 +0200, Yann E. MORIN wrote:
> >
> > > Since Buildroot's license is the GPLv2, BR2_EXTERNAL is covered by the
> > > GPLv2.
> >
> > Probably going to make waves,
> 
> Probably, yes. ;-)
> 
> > but I'm wondering if the GPLv2 is the
> > right license for Buildroot. I believe it is not very easy to
> > understand how the terms of the GPL apply to something such as a build
> > system, and I am not sure that the GPL copyleft requirements are really
> > benefiting to Buildroot in any way. I am pretty sure that the vast
> > majority of companies using Buildroot are not really realizing it's
> > licensed under the GPL and therefore are not complying with the
> > Buildroot license terms (while they probably do realize that the
> > kernel, U-Boot, etc. are under the GPL and comply with their terms).
> 
> On the other hand, the GPLv2 only applies at the time of distribution.
> So long as the Buildroot tre is not distributed, there is no reason to
> fear anything.
> 
> Now, let's try to make things clear:
> 
>   - on an embedded system, the probability that there is a GPL program
>     is rather high (eg. busybox, the Linux kernel);

Not always.  There is still a high contingent in the States that use
VXWorks, and then a lesser population use a home-grown kernel without
every touching GPL code.


> 
>   - lets assume Buildroot is used to build those programs;
> 
>   - the GPL (as applied to _those_ programs, not Buildroot) mandates
>     that the script to control compilation and installation of those
>     programs be made available (section of GPLv2);
> 
>   - so the easiest way to comply with those programs' GPL is to
>     distribute the Buildroot tree that was used to build the target
>     filesystem, since it does contain all required recipes (aka the
>     scripts of section 3 of the GPLv2)
> 
>   - Buildroot is itself GPLv2, so by distributing the Buildroot tree, a
>     company has to release it under GPLv2.

I agree with Yann on this point.  I don't see a valid reason to change
the license of BuildRoot (even if you wanted to make it a less restrictive
license for the main package/*.mk files).  In my current company, I have
discussed in great detail exactly what must be done in order to comply
with the GPL.  The team I'm on has taken great care to isolate the code
into two sections:  Open Sourced code (including MIT license stuff, etc)
and IP code.  I have stressed the importance of carefully considering
how applications are made, what dependencies we have on the applications,
etc.  My company is on-board with (when we get to the point in which
we are shipping Linux as the OS on a product) releasing all the
non-company code.

I believe that, as Yann states below (more to comment on this), a company
acting in "good faith" has the desire to "do the right thing"(tm) ;).  I
would expect that the part that Thomas said is more likely the case.
People who are using BuildRoot may be breaking the license agreement
without intending to, nor without the knowledge they are doing so. In
keeping with his thought, I would support writing a fairly detailed
document (probably should even put a short "comment" in Kconfig about
it) to detail what we believe to be the "right thing".

> 
> > Of
> > course that's not an argument to change the license, but I believe it
> > also highlights how hard it is to understand the GPL requirements on
> > the Buildroot case.
> 
> Sorry, but it is very clear to me, and I am no lawyer. And any decent
> company will have a rather decent team of lawyers to help in these types
> of cases.

Don't assume to much on this one.  Though I have been in the Opened Source
community since 1993, I have seen many companies that didn?t have any
legal support on this.  In fact, I have seen SEVERAL law companies that,
though they are experts on licensing, etc, have never dealt with the GPL.

In the previous three companies that I worked for, there was hardly a
concern about licensing issues as the customer was the US army :\.  So,
we were careful, in those other companies, to package up all the open
sourced code, but we didn't really _do_ anything with it.

> 
> > So, I believe that we should either:
> >
> >  (1) Clarify and document how we believe the GPL terms apply to
> >      Buildroot (this would probably be a long discussion process, in
> >      which the SFLC should probably participate). When I see the
> >      discussions around BR2_EXTERNAL where the package .mk files and
> >      Config.in files may be seen as derivative work, but not the root
> >      filesystem overlay, or that package .mk files for GPL packages
> >      should be under the GPL,
> 
> It all revolves around the definition of a "derivative work".
> 
> We have to decide whether BR2_EXTERNAL is, or parts of it are, a derived
> work of Buildroot. I think you now know my position, I guess. ;-)

Well, In your e-mail (which predates this e-mail by a few minutes)
that starts out: 

	Andy, All,
	
	On 2013-09-16 15:43 +0000, ANDY KENNEDY spake thusly:

You have expounded on what you believe to a derived work.  What you stated
clearly in that e-mail was not the same meaning I derived from your former
e-mails.  I have no problem with your definition of a derived work, thus
I you and I are on the same side of this issue.

<snip>
<Crap!  snipped too much>

Yann, You stated that you would like to see further documentation that
clearly sets guidelines on this matter.  I stated this last week several
times, therefore I completely agree with you.

How ever we choose to license this, we should EXPLICITLY state this in
documentation and CLEARLY show where this document is.  If it comes down
to a vote of current developers, I would like to even put that into the
document, perhaps with a  S H O R T  comment as to the viewpoint of the
voter ;) so that in 10 years there is no confusion about our points of
view to the next generation of BuildRoot users and developers.

Andy

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 17:08                           ` Yann E. MORIN
  2013-09-16 17:45                             ` ANDY KENNEDY
@ 2013-09-16 17:58                             ` Thomas Petazzoni
  2013-09-16 18:15                               ` Yann E. MORIN
  2013-09-16 19:50                             ` Grant Edwards
                                               ` (2 subsequent siblings)
  4 siblings, 1 reply; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-16 17:58 UTC (permalink / raw)
  To: buildroot

Hello,

On Mon, 16 Sep 2013 19:08:15 +0200, Yann E. MORIN wrote:

> > but I'm wondering if the GPLv2 is the
> > right license for Buildroot. I believe it is not very easy to
> > understand how the terms of the GPL apply to something such as a
> > build system, and I am not sure that the GPL copyleft requirements
> > are really benefiting to Buildroot in any way. I am pretty sure
> > that the vast majority of companies using Buildroot are not really
> > realizing it's licensed under the GPL and therefore are not
> > complying with the Buildroot license terms (while they probably do
> > realize that the kernel, U-Boot, etc. are under the GPL and comply
> > with their terms).
> 
> On the other hand, the GPLv2 only applies at the time of distribution.
> So long as the Buildroot tre is not distributed, there is no reason to
> fear anything.

Right, that's true.

> Now, let's try to make things clear:
> 
>   - on an embedded system, the probability that there is a GPL program
>     is rather high (eg. busybox, the Linux kernel);
> 
>   - lets assume Buildroot is used to build those programs;
> 
>   - the GPL (as applied to _those_ programs, not Buildroot) mandates
>     that the script to control compilation and installation of those
>     programs be made available (section of GPLv2);

Whether Buildroot is part of such scripts or not remains a slightly
open question. That the kernel makefiles and scripts, the Busybox
makefiles and scripts should remain part of the kernel and Busybox
sources is clear. That the tool that is used to orchestrate the overall
building process is part of those "script to control compilation and
installation" is not so clear-cut from my point of view.

At least so far, I don't think I've seen many companies using
Buildroot, on products that include GPL components, providing the
source code for Buildroot.

>   - so the easiest way to comply with those programs' GPL is to
>     distribute the Buildroot tree that was used to build the target
>     filesystem, since it does contain all required recipes (aka the
>     scripts of section 3 of the GPLv2)

Right, but it is not necessarily easy to separate within Buildroot the
thing that you are ready to distribute (package recipes of open-source
programs) from the package recipes of proprietary programs, your root
filesystem overlay and so on.

>   - Buildroot is itself GPLv2, so by distributing the Buildroot tree,
> a company has to release it under GPLv2.

Yes, that's for sure, I'm not questioning that.

What I'm questioning is really the case where a company makes an
embedded product, and has used Buildroot to generate a rootfs that
includes GPL programs, is this company required to distribute Buildroot.

> > Of
> > course that's not an argument to change the license, but I believe
> > it also highlights how hard it is to understand the GPL
> > requirements on the Buildroot case.
> 
> Sorry, but it is very clear to me, and I am no lawyer. And any decent
> company will have a rather decent team of lawyers to help in these
> types of cases.

That might be the case where you work, but I honestly don't believe
it's the case in many companies, especially SMEs doing embedded
products.

> > So, I believe that we should either:
> > 
> >  (1) Clarify and document how we believe the GPL terms apply to
> >      Buildroot (this would probably be a long discussion process, in
> >      which the SFLC should probably participate). When I see the
> >      discussions around BR2_EXTERNAL where the package .mk files and
> >      Config.in files may be seen as derivative work, but not the
> > root filesystem overlay, or that package .mk files for GPL packages
> >      should be under the GPL,
> 
> It all revolves around the definition of a "derivative work".
> 
> We have to decide whether BR2_EXTERNAL is, or parts of it are, a
> derived work of Buildroot. I think you now know my position, I
> guess. ;-)

Right.

> >      but not necessarily .mk files for non-GPL
> >      packages,
> 
> Wrong. *If* they are distributed, they'll be under the GPLv2.
> But since they build proprietary (or weak-copyleft licensed) packages,
> it is _not_ required that they be distributed.

Yes, hence I said "not necessarily".

> >      I believe it is way too complicated for users. To me, it
> >      seems like complying with the Buildroot license is more
> >      complicated than using Buildroot itself, which is kind of
> > silly.
> 
> 
> >  (2) Change the Buildroot license to a non-copyleft license.
> 
> That would be a *hard* thing to do, I'm afraid.

Yes, license changes are difficult. Not impossible (VLC changed its
license, for example), but certainly annoying.

> I lean toward an explanation in the manual (with proper disclaimer
> that entice the user to seek legal counsel).

Fair enough. Care to submit a patch? :-)

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 17:45                             ` ANDY KENNEDY
@ 2013-09-16 18:01                               ` Thomas Petazzoni
  2013-09-16 18:16                                 ` Yann E. MORIN
                                                   ` (2 more replies)
  0 siblings, 3 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-16 18:01 UTC (permalink / raw)
  To: buildroot

Dear ANDY KENNEDY,

On Mon, 16 Sep 2013 17:45:00 +0000, ANDY KENNEDY wrote:

> >   - on an embedded system, the probability that there is a GPL
> > program is rather high (eg. busybox, the Linux kernel);
> 
> Not always.  There is still a high contingent in the States that use
> VXWorks, and then a lesser population use a home-grown kernel without
> every touching GPL code.

I believe Yann was implicitly saying "embedded Linux system". Buildroot
is of no-use for VxWorks based systems or other non-Linux operating
systems.

> I agree with Yann on this point.  I don't see a valid reason to change
> the license of BuildRoot (even if you wanted to make it a less
> restrictive license for the main package/*.mk files).  In my current
> company, I have discussed in great detail exactly what must be done
> in order to comply with the GPL.  The team I'm on has taken great
> care to isolate the code into two sections:  Open Sourced code
> (including MIT license stuff, etc) and IP code.  I have stressed the
> importance of carefully considering how applications are made, what
> dependencies we have on the applications, etc.  My company is
> on-board with (when we get to the point in which we are shipping
> Linux as the OS on a product) releasing all the non-company code.

Sure. But in Buildroot, things are more complicated: within Buildroot
*itself* there may be parts that you have to redistribute (i.e package
recipes for GPL programs), and some other parts you may not be willing
to redistribute (i.e package recipes for your own applications, or your
root filesystem overlay). This makes it quite difficult for a company
using Buildroot to easily separate what must be distributed from what
shouldn't be distributed.

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 17:58                             ` Thomas Petazzoni
@ 2013-09-16 18:15                               ` Yann E. MORIN
  2013-09-16 18:24                                 ` Thomas Petazzoni
  0 siblings, 1 reply; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-16 18:15 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2013-09-16 19:58 +0200, Thomas Petazzoni spake thusly:
> On Mon, 16 Sep 2013 19:08:15 +0200, Yann E. MORIN wrote:
> > Now, let's try to make things clear:
> > 
> >   - on an embedded system, the probability that there is a GPL program
> >     is rather high (eg. busybox, the Linux kernel);
> > 
> >   - lets assume Buildroot is used to build those programs;
> > 
> >   - the GPL (as applied to _those_ programs, not Buildroot) mandates
> >     that the script to control compilation and installation of those
> >     programs be made available (section of GPLv2);
> 
> Whether Buildroot is part of such scripts or not remains a slightly
> open question. That the kernel makefiles and scripts, the Busybox
> makefiles and scripts should remain part of the kernel and Busybox
> sources is clear. That the tool that is used to orchestrate the overall
> building process is part of those "script to control compilation and
> installation" is not so clear-cut from my point of view.
> 
> At least so far, I don't think I've seen many companies using
> Buildroot, on products that include GPL components, providing the
> source code for Buildroot.

I never said you *had* to provide the Buildroot tree. I said that
providing it was *easier* than trying to separately provide build
instructions for each GPL program on the device.

> >   - so the easiest way to comply with those programs' GPL is to
> >     distribute the Buildroot tree that was used to build the target
> >     filesystem, since it does contain all required recipes (aka the
> >     scripts of section 3 of the GPLv2)
> 
> Right, but it is not necessarily easy to separate within Buildroot the
> thing that you are ready to distribute (package recipes of open-source
> programs) from the package recipes of proprietary programs, your root
> filesystem overlay and so on.

But your BR2_EXTERNAL will make this really trivial:
  - do all FLOSS stuff in Buildroot tree
  - do all proprietary stuff in BR2_EXTERNAL
  - provide the Buidlroot tree to be compliant
  - keep BR2_EXTERNAL private

Et voil?! :-)

> 
> What I'm questioning is really the case where a company makes an
> embedded product, and has used Buildroot to generate a rootfs that
> includes GPL programs, is this company required to distribute Buildroot.

Short answer: no.
Long answer: no, but it is an easy path.

> > I lean toward an explanation in the manual (with proper disclaimer
> > that entice the user to seek legal counsel).
> 
> Fair enough. Care to submit a patch? :-)

I sure can help write and review such a change.

We just have to settle on what we want to put in there: BR2_EXTERNAL:
derived work or not? ;-)

But not before next week, I have to finish my presentations for KR`13
first! ;-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 18:01                               ` Thomas Petazzoni
@ 2013-09-16 18:16                                 ` Yann E. MORIN
  2013-09-16 21:17                                 ` Peter Korsgaard
  2013-09-18  1:50                                 ` Jason Rennie
  2 siblings, 0 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-16 18:16 UTC (permalink / raw)
  To: buildroot

Thomas, Andy, All,

On 2013-09-16 20:01 +0200, Thomas Petazzoni spake thusly:
> On Mon, 16 Sep 2013 17:45:00 +0000, ANDY KENNEDY wrote:
> > >   - on an embedded system, the probability that there is a GPL
> > > program is rather high (eg. busybox, the Linux kernel);
> > 
> > Not always.  There is still a high contingent in the States that use
> > VXWorks, and then a lesser population use a home-grown kernel without
> > every touching GPL code.
> 
> I believe Yann was implicitly saying "embedded Linux system". Buildroot
> is of no-use for VxWorks based systems or other non-Linux operating
> systems.

Yes, of course. :-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 18:15                               ` Yann E. MORIN
@ 2013-09-16 18:24                                 ` Thomas Petazzoni
  2013-09-16 18:56                                   ` ANDY KENNEDY
  2013-09-16 20:04                                   ` Yann E. MORIN
  0 siblings, 2 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-16 18:24 UTC (permalink / raw)
  To: buildroot

Dear Yann E. MORIN,

On Mon, 16 Sep 2013 20:15:12 +0200, Yann E. MORIN wrote:

> > Whether Buildroot is part of such scripts or not remains a slightly
> > open question. That the kernel makefiles and scripts, the Busybox
> > makefiles and scripts should remain part of the kernel and Busybox
> > sources is clear. That the tool that is used to orchestrate the overall
> > building process is part of those "script to control compilation and
> > installation" is not so clear-cut from my point of view.
> > 
> > At least so far, I don't think I've seen many companies using
> > Buildroot, on products that include GPL components, providing the
> > source code for Buildroot.
> 
> I never said you *had* to provide the Buildroot tree. I said that
> providing it was *easier* than trying to separately provide build
> instructions for each GPL program on the device.

Right. But are there any companies doing any of above? I don't think
I've ever seen a document, or script, or anything like that that
details the build process of the overall system.

I remain unsure that what Buildroot is doing is part of the scripts
governing the compilation of the GPL components.

> > Right, but it is not necessarily easy to separate within Buildroot the
> > thing that you are ready to distribute (package recipes of open-source
> > programs) from the package recipes of proprietary programs, your root
> > filesystem overlay and so on.
> 
> But your BR2_EXTERNAL will make this really trivial:
>   - do all FLOSS stuff in Buildroot tree
>   - do all proprietary stuff in BR2_EXTERNAL
>   - provide the Buidlroot tree to be compliant
>   - keep BR2_EXTERNAL private
> 
> Et voil?! :-)

What a good selling argument for BR2_EXTERNAL :-)

But it isn't quite sufficient: by your definition, the
Buildroot .config should also be shipped, and it also contains config
options for the company-specific proprietary packages. So the .config
should be "filtered" before being released. Not simple.

> > What I'm questioning is really the case where a company makes an
> > embedded product, and has used Buildroot to generate a rootfs that
> > includes GPL programs, is this company required to distribute Buildroot.
> 
> Short answer: no.
> Long answer: no, but it is an easy path.

Aren't companies going to be afraid of revealing too much of their
secret sauce if they have to disclose their Buildroot tree?

My point is also that nobody has ever cared about enforcing the
Buildroot license, and I sincerely doubt anyone will be willing to do
in the foreseeable future. Since no-one cares about that, is it really
necessary to annoy companies with the fairly fuzzy requirements of the
GPL when applied to a build system?

> We just have to settle on what we want to put in there: BR2_EXTERNAL:
> derived work or not? ;-)

If it's considered as a derived work, then your above idea of using
BR2_EXTERNAL to split things between secret stuff and released stuff no
longer works.

> But not before next week, I have to finish my presentations for KR`13
> first! ;-)

Argh, I should do that too!

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-16 17:30                           ` Yann E. MORIN
@ 2013-09-16 18:26                             ` Thomas Petazzoni
  2013-09-16 18:58                               ` ANDY KENNEDY
  0 siblings, 1 reply; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-16 18:26 UTC (permalink / raw)
  To: buildroot

Dear Yann E. MORIN,

On Mon, 16 Sep 2013 19:30:46 +0200, Yann E. MORIN wrote:

> >  So,
> > from a certain point of view, the *.mk files contain various variables
> > and then make a FUNCTION call back into the system.  This would negate there
> > being a "derived work" for anyone adding on an IP app to the build system.
> 
> I think you are confused by your "IP app" and the "recipes to build your
> IP app".

By the way, "IP app", or "IP" doesn't mean anything. Why would
"Intellectual Property" refer to something that is
proprietary/non-free? That doesn't make any sense.

Can't we use "proprietary applications", or "private applications"
instead? Intellectual property really has nothing to do with whether
something is closed-source or open-source.

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-14 22:16                       ` Yann E. MORIN
  2013-09-16 15:43                         ` ANDY KENNEDY
  2013-09-16 16:21                         ` [Buildroot] Is GPLv2 the right license for Buildroot? Thomas Petazzoni
@ 2013-09-16 18:56                         ` Arnout Vandecappelle
  2 siblings, 0 replies; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-16 18:56 UTC (permalink / raw)
  To: buildroot

On 15/09/13 00:16, Yann E. MORIN wrote:
> Arnout, All,
>
> Once again, I am not a lawyer, and the below is not legal advice.
> Anyone sane would consult a lawyer for a definitive legal counsel.

[snip]

  I'm not going to quote the entire mail, but I agree with Yann's analysis.


[snip]
>>   After thinking about it this much, it looks like the buildroot license is a
>> lot more lenient than I first thought. But of course, I don't really now.
>
> I don't believe you could call the GPLv2 'lenient'. In fact I would call
> it anything but lenient: anything that is a derived work of Buildroot is
> covered by its license.
>
> Note: the target rootfs is *not* a derived work of Buildroot.

  With "lenient" I mean that, even though the GPL forces you to make the 
buildroot source available if you use it to build a GPL'ed program, there 
is in fact nothing compelling you to make the _complete_ buildroot source 
(and .config) available - as long as it produces the same GPL'ed program.

  My intuitive assumption, without thinking about it, was that if you are 
compelled to make the buildroot source available, that also means that 
you're compelled to make your modifications (e.g. additional proprietary 
packages) available. However, our analysis in this thread seems to 
indicate that it doesn't. That's why I said it is more lenient than I 
thought.

  Regards,
  Arnout

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 18:24                                 ` Thomas Petazzoni
@ 2013-09-16 18:56                                   ` ANDY KENNEDY
  2013-09-16 20:04                                   ` Yann E. MORIN
  1 sibling, 0 replies; 84+ messages in thread
From: ANDY KENNEDY @ 2013-09-16 18:56 UTC (permalink / raw)
  To: buildroot

> -----Original Message-----
> From: Thomas Petazzoni [mailto:thomas.petazzoni at free-electrons.com]
> 
> Dear Yann E. MORIN,
> 
> On Mon, 16 Sep 2013 20:15:12 +0200, Yann E. MORIN wrote:
> 
> > > Whether Buildroot is part of such scripts or not remains a slightly
> > > open question. That the kernel makefiles and scripts, the Busybox
> > > makefiles and scripts should remain part of the kernel and Busybox
> > > sources is clear. That the tool that is used to orchestrate the overall
> > > building process is part of those "script to control compilation and
> > > installation" is not so clear-cut from my point of view.
> > >
> > > At least so far, I don't think I've seen many companies using
> > > Buildroot, on products that include GPL components, providing the
> > > source code for Buildroot.
> >
> > I never said you *had* to provide the Buildroot tree. I said that
> > providing it was *easier* than trying to separately provide build
> > instructions for each GPL program on the device.
> 
> Right. But are there any companies doing any of above? I don't think
> I've ever seen a document, or script, or anything like that that
> details the build process of the overall system.
> 
> I remain unsure that what Buildroot is doing is part of the scripts
> governing the compilation of the GPL components.

By reading the original license of Buildroot, I find that the license
does imply that one must provide the BR source tree too.  Though,
I am speaking without the aide of any council on my side.

> 
> > > Right, but it is not necessarily easy to separate within Buildroot the
> > > thing that you are ready to distribute (package recipes of open-source
> > > programs) from the package recipes of proprietary programs, your root
> > > filesystem overlay and so on.
> >
> > But your BR2_EXTERNAL will make this really trivial:
> >   - do all FLOSS stuff in Buildroot tree
> >   - do all proprietary stuff in BR2_EXTERNAL
> >   - provide the Buidlroot tree to be compliant
> >   - keep BR2_EXTERNAL private
> >
> > Et voil?! :-)
> 
> What a good selling argument for BR2_EXTERNAL :-)
> 
> But it isn't quite sufficient: by your definition, the
> Buildroot .config should also be shipped, and it also contains config
> options for the company-specific proprietary packages. So the .config
> should be "filtered" before being released. Not simple.

Hmmm, almost sounds like there should be a separate $(MAKE) -C into the
BR2_EXTERNAL directory for menuconfig.  Then, if BR2_EXTERNAL is set,
parse the file $(BR2_EXTERNAL)/.config as a separate entity.

> 
> > > What I'm questioning is really the case where a company makes an
> > > embedded product, and has used Buildroot to generate a rootfs that
> > > includes GPL programs, is this company required to distribute Buildroot.
> >
> > Short answer: no.
> > Long answer: no, but it is an easy path.
> 
> Aren't companies going to be afraid of revealing too much of their
> secret sauce if they have to disclose their Buildroot tree?
> 
> My point is also that nobody has ever cared about enforcing the
> Buildroot license, and I sincerely doubt anyone will be willing to do
> in the foreseeable future. Since no-one cares about that, is it really
> necessary to annoy companies with the fairly fuzzy requirements of the
> GPL when applied to a build system?

In this case, could we not provide the license to mean something like:

BuildRoot is  provided as a  convenience to companies / individuals that
desire  to build an embedded GNU / Linux system for personal pleasure or
for financial gain.   Though BuildRoot  is licensed under the GPLv2, the
intent of the licenser is to protect the developers of the code from any
third party wishing to seek  legal action in the event of harm done to a
system by the use/misuse of BuildRoot.  Also, the desire of the licenser
is to grant access of the  BuildRoot build system to  use in the  manner
that is most beneficial to the licensee. The expectation of the licensee
is that  you  will  provide the BuildRoot build  system  for all  binary
kernels, root file systems, and any  other GPL code  that you build with
your  binaries as the  "build scripts"  for the related  GPL code.   The
licenser does not desire to seek legal action for the use in any form of
the BuildRoot build system, but asks only that those companies/individu-
als that use BuildRoot to make financial gain respect the  community and
help us to make  BuildRoot better.   If you believe  that BuildRoot is a
build system that can assist you, please PUSH BACK YOUR  IMPROVEMENTS TO
BUILDROOT!!

> 
> > We just have to settle on what we want to put in there: BR2_EXTERNAL:
> > derived work or not? ;-)
> 
> If it's considered as a derived work, then your above idea of using
> BR2_EXTERNAL to split things between secret stuff and released stuff no
> longer works.
> 
> > But not before next week, I have to finish my presentations for KR`13
> > first! ;-)
> 
> Argh, I should do that too!

Yeah, ya'll have fun with that :(.  There is no way for me to attend such
a function (lack of funds, wife, three kids with one on the way, etc).

Andy

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization
  2013-09-16 18:26                             ` Thomas Petazzoni
@ 2013-09-16 18:58                               ` ANDY KENNEDY
  0 siblings, 0 replies; 84+ messages in thread
From: ANDY KENNEDY @ 2013-09-16 18:58 UTC (permalink / raw)
  To: buildroot

> -----Original Message-----
> From: Thomas Petazzoni [mailto:thomas.petazzoni at free-electrons.com]
> 
> Dear Yann E. MORIN,
> 
> On Mon, 16 Sep 2013 19:30:46 +0200, Yann E. MORIN wrote:
> 
> > >  So,
> > > from a certain point of view, the *.mk files contain various variables
> > > and then make a FUNCTION call back into the system.  This would negate there
> > > being a "derived work" for anyone adding on an IP app to the build system.
> >
> > I think you are confused by your "IP app" and the "recipes to build your
> > IP app".
> 
> By the way, "IP app", or "IP" doesn't mean anything. Why would
> "Intellectual Property" refer to something that is
> proprietary/non-free? That doesn't make any sense.
> 
> Can't we use "proprietary applications", or "private applications"
> instead? Intellectual property really has nothing to do with whether
> something is closed-source or open-source.

Again, that is "common vernacular" in my world.  I'll try to adopt your
words while speaking on your list ;).

Andy

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 17:08                           ` Yann E. MORIN
  2013-09-16 17:45                             ` ANDY KENNEDY
  2013-09-16 17:58                             ` Thomas Petazzoni
@ 2013-09-16 19:50                             ` Grant Edwards
  2013-09-16 20:15                               ` Yann E. MORIN
  2013-09-18  1:52                               ` Jason Rennie
  2013-09-16 19:53                             ` Arnout Vandecappelle
  2013-09-16 21:13                             ` Peter Korsgaard
  4 siblings, 2 replies; 84+ messages in thread
From: Grant Edwards @ 2013-09-16 19:50 UTC (permalink / raw)
  To: buildroot

On 2013-09-16, Yann E. MORIN <yann.morin.1998@free.fr> wrote:

> Sorry, but it is very clear to me, and I am no lawyer. And any decent
> company will have a rather decent team of lawyers to help in these types
> of cases.

So no company with less that several hundred employees is "decent"?

-- 
Grant Edwards               grant.b.edwards        Yow! My EARS are GONE!!
                                  at               
                              gmail.com            

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 17:08                           ` Yann E. MORIN
                                               ` (2 preceding siblings ...)
  2013-09-16 19:50                             ` Grant Edwards
@ 2013-09-16 19:53                             ` Arnout Vandecappelle
  2013-09-16 21:13                             ` Peter Korsgaard
  4 siblings, 0 replies; 84+ messages in thread
From: Arnout Vandecappelle @ 2013-09-16 19:53 UTC (permalink / raw)
  To: buildroot

On 16/09/13 19:08, Yann E. MORIN wrote:
> Thomas, All,
>
> On 2013-09-16 18:21 +0200, Thomas Petazzoni spake thusly:
>> >On Sun, 15 Sep 2013 00:16:13 +0200, Yann E. MORIN wrote:
>> >
>>> > >Since Buildroot's license is the GPLv2, BR2_EXTERNAL is covered by the
>>> > >GPLv2.
>> >
>> >Probably going to make waves,
> Probably, yes.;-)
>
>> >but I'm wondering if the GPLv2 is the
>> >right license for Buildroot. I believe it is not very easy to
>> >understand how the terms of the GPL apply to something such as a build
>> >system, and I am not sure that the GPL copyleft requirements are really
>> >benefiting to Buildroot in any way. I am pretty sure that the vast
>> >majority of companies using Buildroot are not really realizing it's
>> >licensed under the GPL and therefore are not complying with the
>> >Buildroot license terms (while they probably do realize that the
>> >kernel, U-Boot, etc. are under the GPL and comply with their terms).
> On the other hand, the GPLv2 only applies at the time of distribution.
> So long as the Buildroot tre is not distributed, there is no reason to
> fear anything.
>
> Now, let's try to make things clear:
>
>    - on an embedded system, the probability that there is a GPL program
>      is rather high (eg. busybox, the Linux kernel);
>
>    - lets assume Buildroot is used to build those programs;
>
>    - the GPL (as applied to_those_  programs, not Buildroot) mandates
>      that the script to control compilation and installation of those
>      programs be made available (section of GPLv2);
>
>    - so the easiest way to comply with those programs' GPL is to
>      distribute the Buildroot tree that was used to build the target
>      filesystem, since it does contain all required recipes (aka the
>      scripts of section 3 of the GPLv2)
>
>    - Buildroot is itself GPLv2, so by distributing the Buildroot tree, a
>      company has to release it under GPLv2.

  I think this states the same as docs/manual/legal-notice.txt already 
does, though a bit easier to follow. That paragraph in the manual also 
clearly states that this is the interpretation of the buildroot developers.

  I think that for the users, things are still simple: just make 
buildroot available. It also takes away a large part of the burden of 
GPL-compliance, because buildroot takes care of downloading the source so 
you can consider that job done (at least according to the spirit of the 
license, and explicitly in GPLv3).

  As to the .config: would it really be an issue for your company that 
the end user can see that there is something called BR2_THE_APP installed 
on the system? Looking back at some buildroot projects I've done, the 
proprietary packages had names like "pir", "h264", "upgrade", "rt_app", 
"system". Like, that's really leaking information...

  And for the really paranoid companies that lock down their filesystem 
sufficiently that users can't read (and thereby discover those top-secret 
application names), I think they will can afford the 15-minute investment 
to grep away the proprietary packages from the .config.


  However, coming back to Thomas's idea of changing the license: the 
buildroot license is not really the issue here. Even if buildroot were 
MIT-licensed, the GPL of the target programs may still require you to 
provide the buildroot source. Since buildroot itself is source-only, 
there is really no big difference between GPL or any other free software 
license.


  Regards,
  Arnout

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 18:24                                 ` Thomas Petazzoni
  2013-09-16 18:56                                   ` ANDY KENNEDY
@ 2013-09-16 20:04                                   ` Yann E. MORIN
  2013-09-17  4:17                                     ` Thomas Petazzoni
  1 sibling, 1 reply; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-16 20:04 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2013-09-16 20:24 +0200, Thomas Petazzoni spake thusly:
> On Mon, 16 Sep 2013 20:15:12 +0200, Yann E. MORIN wrote:
> > But your BR2_EXTERNAL will make this really trivial:
> >   - do all FLOSS stuff in Buildroot tree
> >   - do all proprietary stuff in BR2_EXTERNAL
> >   - provide the Buidlroot tree to be compliant
> >   - keep BR2_EXTERNAL private
> > 
> > Et voil?! :-)
> 
> What a good selling argument for BR2_EXTERNAL :-)

Hehe! :-)

Also, I would like to reiterate my suggestion the vriable BR2_EXTERNAL
contains a list (space- or colon-sperated, as you wish) of external
trees to descend into, rather than containing a single entry.

This way, one could have this layout:

    buildroot/    <- Buildroot tree with only redistributable changes
    ext-floss/    <- external tree with only FLOSS components
    ext-prop/     <- external tree with weak-copyleft or proprietary
                     components

which would be used as thus:
    make BR2_EXTERNAL="/path/to/ext-floss /path/to/ext-prop"

Then, distribute both buildroot/ and ext-floss/ and you're compliant
without leaking any sensitive stuff.

A side question to this: what if any of the external tree(s) contain a
package already in a previous external tree or in the original Buildroot
tree?

> But it isn't quite sufficient: by your definition, the
> Buildroot .config should also be shipped, and it also contains config
> options for the company-specific proprietary packages. So the .config
> should be "filtered" before being released. Not simple.

I think that is relatively easy: in the Buildroot tree, just run:
    make BR2_EXTERNAL= oldconfig

That will expunge the .config from any variable from the BR2_EXTERNAL
tree. You can then tar up the Buildroot tree, and make that available.
Quite easy, but requires a process that documents this simple extra step
prior to publication.

> > > What I'm questioning is really the case where a company makes an
> > > embedded product, and has used Buildroot to generate a rootfs that
> > > includes GPL programs, is this company required to distribute Buildroot.
> > 
> > Short answer: no.
> > Long answer: no, but it is an easy path.
> 
> Aren't companies going to be afraid of revealing too much of their
> secret sauce if they have to disclose their Buildroot tree?

Depends on what you call "their secret sauce". If you meant "their
prorietary apps packaged in Buildroot" then, curently, yes, since those
would be in the Buildroot tree. But with BR2_EXTERNAL (and the little
oldconfig trick above), that'd be straightforward.

If you meant "the fact that they actually use Buildroot", then I don;t
think how this could be seen as a "secret sauce".

> My point is also that nobody has ever cared about enforcing the
> Buildroot license, and I sincerely doubt anyone will be willing to do
> in the foreseeable future. Since no-one cares about that, is it really
> necessary to annoy companies with the fairly fuzzy requirements of the
> GPL when applied to a build system?
> 
> > We just have to settle on what we want to put in there: BR2_EXTERNAL:
> > derived work or not? ;-)
> 
> If it's considered as a derived work, then your above idea of using
> BR2_EXTERNAL to split things between secret stuff and released stuff no
> longer works.

Well, yes it still stands. The GPL only applies at the time of
distribution. So if BR2_EXTERNAL only contains recipes for
weak-copyleft or non-copyleft packages, then there is no need for the
company to distribute it, since the "official" Buildroot tree is enough
to reproduce the GPL program(s) on the target.

This applies, of course, only if the company decides to publish
Buildroot to catter for section 3 of the GPL of those programs.

If the company decides for another route, then this point is moot
anyway, since there is no distribution at all.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 19:50                             ` Grant Edwards
@ 2013-09-16 20:15                               ` Yann E. MORIN
  2013-09-18  1:52                               ` Jason Rennie
  1 sibling, 0 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-16 20:15 UTC (permalink / raw)
  To: buildroot

Grant, All,

On 2013-09-16 19:50 +0000, Grant Edwards spake thusly:
> On 2013-09-16, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> 
> > Sorry, but it is very clear to me, and I am no lawyer. And any decent
> > company will have a rather decent team of lawyers to help in these types
> > of cases.
> 
> So no company with less that several hundred employees is "decent"?

Yes, sorry, I've been pushing that one a bit too far.
You've served me right. I do apologise.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 16:21                         ` [Buildroot] Is GPLv2 the right license for Buildroot? Thomas Petazzoni
  2013-09-16 17:08                           ` Yann E. MORIN
@ 2013-09-16 21:12                           ` Peter Korsgaard
  2013-09-17  4:44                             ` Thomas Petazzoni
  1 sibling, 1 reply; 84+ messages in thread
From: Peter Korsgaard @ 2013-09-16 21:12 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

Hi,

 Thomas> So, I believe that we should either:

 Thomas>  (1) Clarify and document how we believe the GPL terms apply to
 Thomas>      Buildroot (this would probably be a long discussion process, in
 Thomas>      which the SFLC should probably participate). When I see the
 Thomas>      discussions around BR2_EXTERNAL where the package .mk files and
 Thomas>      Config.in files may be seen as derivative work, but not the root
 Thomas>      filesystem overlay, or that package .mk files for GPL packages
 Thomas>      should be under the GPL, but not necessarily .mk files for non-GPL
 Thomas>      packages, I believe it is way too complicated for users. To me, it
 Thomas>      seems like complying with the Buildroot license is more
 Thomas>      complicated than using Buildroot itself, which is kind of silly.

We have already tried to clarify it in the user manual:

http://buildroot.net/downloads/manual/manual.html#_complying_with_the_buildroot_license

E.G. Buildroot should be handled just like how you handle the Linux
kernel and Busybox.


 Thomas>  (2) Change the Buildroot license to a non-copyleft license. Of course,
 Thomas>      that requires contacting a lot of people, but maybe not so much:
 Thomas>      over the last 3-4 years, the vast majority of the Buildroot code
 Thomas>      base has been rewritten, and many of the people having worked on
 Thomas>      that are still around today.

It's imho still too many people to be realistic:

git shortlog -s --since='3 years' | wc -l
230


 Thomas> What other build systems are doing:

 Thomas>  * Yocto/OpenEmbeded: bitbake is under GPLv2, the rest (package
 Thomas>    recipes) is under MIT.

 Thomas>  * PTXdist is under GPLv2, but has a small license clarification "Note:
 Thomas>    PTXdist is a build system which generates a distribution for
 Thomas>    embedded systems. This license does only cover the build system
 Thomas>    itself and doesn't affect the license of managed software in any
 Thomas>    way, even if it might be distributed together with the build
 Thomas>    system." I believe it doesn't really clarify completely how the GPL
 Thomas>    applies to a build system.

 Thomas>  * OpenBricks is under GPLv2.

 Thomas>  * OpenWRT is under GPLv2, since it is originally a fork of Buildroot.

 Thomas>  * LTIB is under GPLv2.

So they are basically all in the same boat as us.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 17:08                           ` Yann E. MORIN
                                               ` (3 preceding siblings ...)
  2013-09-16 19:53                             ` Arnout Vandecappelle
@ 2013-09-16 21:13                             ` Peter Korsgaard
  4 siblings, 0 replies; 84+ messages in thread
From: Peter Korsgaard @ 2013-09-16 21:13 UTC (permalink / raw)
  To: buildroot

>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:

Hi,

 Yann> Now, let's try to make things clear:

 Yann>   - on an embedded system, the probability that there is a GPL program
 Yann>     is rather high (eg. busybox, the Linux kernel);

 Yann>   - lets assume Buildroot is used to build those programs;

 Yann>   - the GPL (as applied to _those_ programs, not Buildroot) mandates
 Yann>     that the script to control compilation and installation of those
 Yann>     programs be made available (section of GPLv2);

 Yann>   - so the easiest way to comply with those programs' GPL is to
 Yann>     distribute the Buildroot tree that was used to build the target
 Yann>     filesystem, since it does contain all required recipes (aka the
 Yann>     scripts of section 3 of the GPLv2)

 Yann>   - Buildroot is itself GPLv2, so by distributing the Buildroot tree, a
 Yann>     company has to release it under GPLv2.

Indeed.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 18:01                               ` Thomas Petazzoni
  2013-09-16 18:16                                 ` Yann E. MORIN
@ 2013-09-16 21:17                                 ` Peter Korsgaard
  2013-09-18  1:50                                 ` Jason Rennie
  2 siblings, 0 replies; 84+ messages in thread
From: Peter Korsgaard @ 2013-09-16 21:17 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

Hi,

 Thomas> Sure. But in Buildroot, things are more complicated: within Buildroot
 Thomas> *itself* there may be parts that you have to redistribute (i.e package
 Thomas> recipes for GPL programs), and some other parts you may not be willing
 Thomas> to redistribute (i.e package recipes for your own applications, or your
 Thomas> root filesystem overlay). This makes it quite difficult for a company
 Thomas> using Buildroot to easily separate what must be distributed from what
 Thomas> shouldn't be distributed.

I can only speak of personal experience, naturally (and you get to work
with a lot more companies than I do), but I haven't seen this as a big
problem. These things typically don't contain many "secrets".

People basically have 2 options:

- Integrate their changes in the Buildroot tree and gain the advantages
  of Buildroot

- Or keep it seperate (E.G add the stuff outside buildroot) and be able
  to keep it secret.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 20:04                                   ` Yann E. MORIN
@ 2013-09-17  4:17                                     ` Thomas Petazzoni
  0 siblings, 0 replies; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-17  4:17 UTC (permalink / raw)
  To: buildroot

Dear Yann E. MORIN,

On Mon, 16 Sep 2013 22:04:20 +0200, Yann E. MORIN wrote:

> Also, I would like to reiterate my suggestion the vriable BR2_EXTERNAL
> contains a list (space- or colon-sperated, as you wish) of external
> trees to descend into, rather than containing a single entry.

Unfortunately, I don't think this is easy to do. Have you seen how the
BR2_EXTERNAL/Config.in gets included in the top-level menu? The way
we're doing this in the current implementation doesn't make it easy to
have several paths in BR2_EXTERNAL.

> A side question to this: what if any of the external tree(s) contain a
> package already in a previous external tree or in the original
> Buildroot tree?

I don't think we want to support overlay-ing packages.

> > But it isn't quite sufficient: by your definition, the
> > Buildroot .config should also be shipped, and it also contains
> > config options for the company-specific proprietary packages. So
> > the .config should be "filtered" before being released. Not simple.
> 
> I think that is relatively easy: in the Buildroot tree, just run:
>     make BR2_EXTERNAL= oldconfig
> 
> That will expunge the .config from any variable from the BR2_EXTERNAL
> tree. You can then tar up the Buildroot tree, and make that available.
> Quite easy, but requires a process that documents this simple extra
> step prior to publication.

Hum, right, makes sense.

> > Aren't companies going to be afraid of revealing too much of their
> > secret sauce if they have to disclose their Buildroot tree?
> 
> Depends on what you call "their secret sauce". If you meant "their
> prorietary apps packaged in Buildroot" then, curently, yes, since
> those would be in the Buildroot tree. But with BR2_EXTERNAL (and the
> little oldconfig trick above), that'd be straightforward.
> 
> If you meant "the fact that they actually use Buildroot", then I don;t
> think how this could be seen as a "secret sauce".

I was talking about their proprietary apps / rootfs overlay, etc. Which
indeed with BR2_EXTERNAL they can keep separate.

> > If it's considered as a derived work, then your above idea of using
> > BR2_EXTERNAL to split things between secret stuff and released
> > stuff no longer works.
> 
> Well, yes it still stands. The GPL only applies at the time of
> distribution. So if BR2_EXTERNAL only contains recipes for
> weak-copyleft or non-copyleft packages,

Yes, and this *if* is very important.

> then there is no need for the
> company to distribute it, since the "official" Buildroot tree is
> enough to reproduce the GPL program(s) on the target.
> 
> This applies, of course, only if the company decides to publish
> Buildroot to catter for section 3 of the GPL of those programs.
> 
> If the company decides for another route, then this point is moot
> anyway, since there is no distribution at all.

Sure.

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 21:12                           ` Peter Korsgaard
@ 2013-09-17  4:44                             ` Thomas Petazzoni
  2013-09-17 14:53                               ` Grant Edwards
  0 siblings, 1 reply; 84+ messages in thread
From: Thomas Petazzoni @ 2013-09-17  4:44 UTC (permalink / raw)
  To: buildroot

Dear Peter Korsgaard,

On Mon, 16 Sep 2013 23:12:55 +0200, Peter Korsgaard wrote:

> We have already tried to clarify it in the user manual:
> 
> http://buildroot.net/downloads/manual/manual.html#_complying_with_the_buildroot_license
> 
> E.G. Buildroot should be handled just like how you handle the Linux
> kernel and Busybox.

I think it's not really as clear as some other explanations that Yann
gave. Especially that:

 *) Distributing Buildroot as part of the "scripts needed for
 compilation" requirement is not due to the fact that Buildroot is
 under the GPL, but because most likely the embedded Linux system
 produced does contain GPL packages.

 *) That an alternate possibilities to distributing Buildroot is to
 provide a large shell script that runs the same commands that
 Buildroot is doing, but that this is probably much more complicated
 than providing the Buildroot source code.

 *) That package recipes for non-GPL packages can be removed from the
 Buildroot tree before it is distributed (especially the package
 recipes for proprietary applications)

 *) That the .config should be included as well, but that references to
 non-GPL applications can be removed from the .config if necessary.

>  Thomas>  (2) Change the Buildroot license to a non-copyleft license.
>  Thomas> Of course, that requires contacting a lot of people, but
>  Thomas> maybe not so much: over the last 3-4 years, the vast
>  Thomas> majority of the Buildroot code base has been rewritten, and
>  Thomas> many of the people having worked on that are still around
>  Thomas> today.
> 
> It's imho still too many people to be realistic:
> 
> git shortlog -s --since='3 years' | wc -l
> 230

It's not so many people in fact :)


> 
> 
>  Thomas> What other build systems are doing:
> 
>  Thomas>  * Yocto/OpenEmbeded: bitbake is under GPLv2, the rest
>  Thomas> (package recipes) is under MIT.
> 
>  Thomas>  * PTXdist is under GPLv2, but has a small license
>  Thomas> clarification "Note: PTXdist is a build system which
>  Thomas> generates a distribution for embedded systems. This license
>  Thomas> does only cover the build system itself and doesn't affect
>  Thomas> the license of managed software in any way, even if it might
>  Thomas> be distributed together with the build system." I believe it
>  Thomas> doesn't really clarify completely how the GPL applies to a
>  Thomas> build system.
> 
>  Thomas>  * OpenBricks is under GPLv2.
> 
>  Thomas>  * OpenWRT is under GPLv2, since it is originally a fork of
>  Thomas> Buildroot.
> 
>  Thomas>  * LTIB is under GPLv2.
> 
> So they are basically all in the same boat as us.

Yes, but I do believe that no company is actually complying to the GPL
requirements by providing the build system source code. So yes, they
are under GPLv2, now whether that makes sense or not is a different
question :-)

But ok, my question "Is GPLv2 the right license for Buildroot" was
mainly a rhetoric question, I am really not that much interested in
working on a license change process, but I continue to think that
additional clarifications on how the license requirements apply to
Buildroot would be nice.

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-17  4:44                             ` Thomas Petazzoni
@ 2013-09-17 14:53                               ` Grant Edwards
  2013-09-17 15:17                                 ` Jeremy Rosen
  2013-09-17 15:29                                 ` Peter Korsgaard
  0 siblings, 2 replies; 84+ messages in thread
From: Grant Edwards @ 2013-09-17 14:53 UTC (permalink / raw)
  To: buildroot

On 2013-09-17, Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote:

> Yes, but I do believe that no company is actually complying to the
> GPL requirements by providing the build system source code.

We do.  I wrote a shell-script that removes proprietary files/packages
and bundles the resulting buildroot source tree which can then be used
to build all of the open-source stuff.

Nobody's ever _requested_ the sources, but they're available.  

I don't expect that anyone ever will request sources, since without
the proprietary software, the hardware is pretty much useless.  I
doubt any of our customers would be capable of building it even if
they did have the source tree in hand.

-- 
Grant Edwards               grant.b.edwards        Yow! If I had a Q-TIP, I
                                  at               could prevent th' collapse
                              gmail.com            of NEGOTIATIONS!!

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-17 14:53                               ` Grant Edwards
@ 2013-09-17 15:17                                 ` Jeremy Rosen
  2013-09-17 15:22                                   ` Grant Edwards
  2013-09-17 15:29                                 ` Peter Korsgaard
  1 sibling, 1 reply; 84+ messages in thread
From: Jeremy Rosen @ 2013-09-17 15:17 UTC (permalink / raw)
  To: buildroot

I'll second that,

when we develop software for a customer building a product we educate them
on their duties WRT open-source software and what they should do to comply.
We also provide them with all the source code they need to comply.

(on a side note, some customers don't want to deal with that and just let
us push upstream all the changes to FOSS so all changes are upstream and
they don't need to provide their changes :P )

But don't overestimate that whole "provide the code" thing. There is 
very little code to provide, 99% of the code our customers use is unmodified
and their only duty is to point you to the original project's URL (that 
usually includes buildroot). The only real modification would be  if the
.config is considered derived work. But for a lot of our customers that would
be the only thing they would need to provide...

    Cordialement

    J?r?my Rosen

fight key loggers : write some perl using vim

----- Mail original -----
> On 2013-09-17, Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> wrote:
> 
> > Yes, but I do believe that no company is actually complying to the
> > GPL requirements by providing the build system source code.
> 
> We do.  I wrote a shell-script that removes proprietary
> files/packages
> and bundles the resulting buildroot source tree which can then be
> used
> to build all of the open-source stuff.
> 
> Nobody's ever _requested_ the sources, but they're available.
> 
> I don't expect that anyone ever will request sources, since without
> the proprietary software, the hardware is pretty much useless.  I
> doubt any of our customers would be capable of building it even if
> they did have the source tree in hand.
> 
> --
> Grant Edwards               grant.b.edwards        Yow! If I had a
> Q-TIP, I
>                                   at               could prevent th'
>                                   collapse
>                               gmail.com            of NEGOTIATIONS!!
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
> 

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-17 15:17                                 ` Jeremy Rosen
@ 2013-09-17 15:22                                   ` Grant Edwards
  0 siblings, 0 replies; 84+ messages in thread
From: Grant Edwards @ 2013-09-17 15:22 UTC (permalink / raw)
  To: buildroot

On 2013-09-17, Jeremy Rosen <jeremy.rosen@openwide.fr> wrote:

> But don't overestimate that whole "provide the code" thing. There is 
> very little code to provide, 99% of the code our customers use is unmodified
> and their only duty is to point you to the original project's URL (that 
> usually includes buildroot).

I don't think that's true.  If you distribute a binary, you must
provide or offer to provide the actual source code on machine-readable
media.  Legally, you can't just give somebody a URL to a third-party
site where the source code can be obtained.  In practice, that's often
enough to make most people happy, but it's not enough to satisfy the
GPL.

-- 
Grant Edwards               grant.b.edwards        Yow! Of course, you
                                  at               UNDERSTAND about the PLAIDS
                              gmail.com            in the SPIN CYCLE --

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-17 14:53                               ` Grant Edwards
  2013-09-17 15:17                                 ` Jeremy Rosen
@ 2013-09-17 15:29                                 ` Peter Korsgaard
  1 sibling, 0 replies; 84+ messages in thread
From: Peter Korsgaard @ 2013-09-17 15:29 UTC (permalink / raw)
  To: buildroot

>>>>> "Grant" == Grant Edwards <grant.b.edwards@gmail.com> writes:

 Grant> On 2013-09-17, Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote:
 >> Yes, but I do believe that no company is actually complying to the
 >> GPL requirements by providing the build system source code.

 Grant> We do.  I wrote a shell-script that removes proprietary files/packages
 Grant> and bundles the resulting buildroot source tree which can then be used
 Grant> to build all of the open-source stuff.

 Grant> Nobody's ever _requested_ the sources, but they're available.  

 Grant> I don't expect that anyone ever will request sources, since without
 Grant> the proprietary software, the hardware is pretty much useless.  I
 Grant> doubt any of our customers would be capable of building it even if
 Grant> they did have the source tree in hand.

Indeed. I've also archived U-Boot / Linux / Buildroot and ensured the
user manual contains the GPL source code offer for our products, but so
far nobody has ever requested it.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 18:01                               ` Thomas Petazzoni
  2013-09-16 18:16                                 ` Yann E. MORIN
  2013-09-16 21:17                                 ` Peter Korsgaard
@ 2013-09-18  1:50                                 ` Jason Rennie
  2013-09-18  7:22                                   ` Peter Korsgaard
  2013-09-18 22:09                                   ` Yann E. MORIN
  2 siblings, 2 replies; 84+ messages in thread
From: Jason Rennie @ 2013-09-18  1:50 UTC (permalink / raw)
  To: buildroot

I may be missing something here and feel free to call me names if I am, 
also IANAL.

That being said, wouldn't building a system with buildroot be 
essentially the same case to using GCC to compile a program? The final 
libraries you link with (or packages you include in the case of 
buildroot) may be encumbered with all manner of licenses but the license 
of the buildtool doesn't make any difference to the license status of 
the final product.

If you were making changes to buildroot and redistributing those then 
the license would apply but not otherwise.

Jason

On 17/09/2013 4:01 AM, Thomas Petazzoni wrote:
> Dear ANDY KENNEDY,
>
> On Mon, 16 Sep 2013 17:45:00 +0000, ANDY KENNEDY wrote:
>
>>>    - on an embedded system, the probability that there is a GPL
>>> program is rather high (eg. busybox, the Linux kernel);
>> Not always.  There is still a high contingent in the States that use
>> VXWorks, and then a lesser population use a home-grown kernel without
>> every touching GPL code.
> I believe Yann was implicitly saying "embedded Linux system". Buildroot
> is of no-use for VxWorks based systems or other non-Linux operating
> systems.
>
>> I agree with Yann on this point.  I don't see a valid reason to change
>> the license of BuildRoot (even if you wanted to make it a less
>> restrictive license for the main package/*.mk files).  In my current
>> company, I have discussed in great detail exactly what must be done
>> in order to comply with the GPL.  The team I'm on has taken great
>> care to isolate the code into two sections:  Open Sourced code
>> (including MIT license stuff, etc) and IP code.  I have stressed the
>> importance of carefully considering how applications are made, what
>> dependencies we have on the applications, etc.  My company is
>> on-board with (when we get to the point in which we are shipping
>> Linux as the OS on a product) releasing all the non-company code.
> Sure. But in Buildroot, things are more complicated: within Buildroot
> *itself* there may be parts that you have to redistribute (i.e package
> recipes for GPL programs), and some other parts you may not be willing
> to redistribute (i.e package recipes for your own applications, or your
> root filesystem overlay). This makes it quite difficult for a company
> using Buildroot to easily separate what must be distributed from what
> shouldn't be distributed.
>
> Thomas

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-16 19:50                             ` Grant Edwards
  2013-09-16 20:15                               ` Yann E. MORIN
@ 2013-09-18  1:52                               ` Jason Rennie
  1 sibling, 0 replies; 84+ messages in thread
From: Jason Rennie @ 2013-09-18  1:52 UTC (permalink / raw)
  To: buildroot

On 17/09/2013 5:50 AM, Grant Edwards wrote:
> On 2013-09-16, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>
>> Sorry, but it is very clear to me, and I am no lawyer. And any decent
>> company will have a rather decent team of lawyers to help in these types
>> of cases.
> So no company with less that several hundred employees is "decent"?
>
I think decent means large in this context rather than morally upright.

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-18  1:50                                 ` Jason Rennie
@ 2013-09-18  7:22                                   ` Peter Korsgaard
  2013-09-18 22:09                                   ` Yann E. MORIN
  1 sibling, 0 replies; 84+ messages in thread
From: Peter Korsgaard @ 2013-09-18  7:22 UTC (permalink / raw)
  To: buildroot

>>>>> "Jason" == Jason Rennie <jason.rennie@rftechnology.com.au> writes:

 Jason> I may be missing something here and feel free to call me names if I
 Jason> am, also IANAL.

 Jason> That being said, wouldn't building a system with buildroot be
 Jason> essentially the same case to using GCC to compile a program? The final
 Jason> libraries you link with (or packages you include in the case of
 Jason> buildroot) may be encumbered with all manner of licenses but the
 Jason> license of the buildtool doesn't make any difference to the license
 Jason> status of the final product.

 Jason> If you were making changes to buildroot and redistributing those then
 Jason> the license would apply but not otherwise.

Well, yes and no - It depends on the interpretation the 'scripts used to
control compilation' part of section 3:

The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source code
means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to control
compilation and installation of the executable

Again, IANAL.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-18  1:50                                 ` Jason Rennie
  2013-09-18  7:22                                   ` Peter Korsgaard
@ 2013-09-18 22:09                                   ` Yann E. MORIN
  2013-09-19  0:25                                     ` Jason Rennie
  1 sibling, 1 reply; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-18 22:09 UTC (permalink / raw)
  To: buildroot

Jason, All,

On 2013-09-18 11:50 +1000, Jason Rennie spake thusly:
> I may be missing something here and feel free to call me names if I am, also
> IANAL.
> 
> That being said, wouldn't building a system with buildroot be essentially
> the same case to using GCC to compile a program? The final libraries you
> link with (or packages you include in the case of buildroot) may be
> encumbered with all manner of licenses but the license of the buildtool
> doesn't make any difference to the license status of the final product.

Yes, that's basically true.

But consider this:

  - you use Buildroot to build a GPL package, which ends up on the
    target

  - that package is GPL, so the GPL applies to that package

  - section 3 of the GPL requires you provide the "scripts used to
    control compilation and installation of the executable."

  - So you have two options:
    - come up with the instructions by yourself (by looking at how
      Buildroot does its stuff, for example), but it's not trivial;
    - or provide your Buildroot tree (and .config) since this is the
      easiest. Let's assume that's the way you go.

  - so, since you are distributing Buildroot, you have to abide by its
    license. It happens that this license is the GPL, but it's just
    happenstance that it is the same license as your GPL package, above.

> If you were making changes to buildroot and redistributing those then the
> license would apply but not otherwise.

I believe we never argued otherwise. :-)

What was said was, to comply with the section 3 of the GPLv2 for programs
on the target, the easiest is to provide the Buildroot tree (and .config).

Note that doing so is not enough: you'd still have to provide the sources
of the (L)GPL programs that end up on the target.

Again, IANAL... ;-)

Note: I'm talking about section 3 of the GPLv2. GPLv3 has a similar
section, but I'm not digging it now; I'll let you look at it by
yourself! ;-p

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-18 22:09                                   ` Yann E. MORIN
@ 2013-09-19  0:25                                     ` Jason Rennie
  2013-09-19 17:54                                       ` Yann E. MORIN
  0 siblings, 1 reply; 84+ messages in thread
From: Jason Rennie @ 2013-09-19  0:25 UTC (permalink / raw)
  To: buildroot

On 19/09/2013 8:09 AM, Yann E. MORIN wrote:
>
> Yes, that's basically true.
>
> But consider this:
>    - you use Buildroot to build a GPL package, which ends up on the
>      target
>
>    - that package is GPL, so the GPL applies to that package
>
>    - section 3 of the GPL requires you provide the "scripts used to
>      control compilation and installation of the executable."
>
>    - So you have two options:
>      - come up with the instructions by yourself (by looking at how
>        Buildroot does its stuff, for example), but it's not trivial;
>      - or provide your Buildroot tree (and .config) since this is the
>        easiest. Let's assume that's the way you go.
>
>    - so, since you are distributing Buildroot, you have to abide by its
>      license. It happens that this license is the GPL, but it's just
>      happenstance that it is the same license as your GPL package, above.
>

Wouldn't the intent of the license suggest that this was talking about 
the makefiles/configure scripts/whatever that you need to actually build 
the executable? Rather than some metabuild script like buildroot? I'm 
guessing the clause is there to stop someone "complying" by giving you a 
bunch of .c and .h files but not providing you a meaningful way to get 
an executeable out the other end.

The understanding you are suggesting would seem to be like requiring 
that the automated build script that runs on a build server of an 
evening (which calls the make files, maybe runs some automated tests 
etc, basically an automated developer task) would need to be included to 
distribute the software.

As I said IANAL and so perhaps that would be required but that would 
seem like a bug in the license at that point and the problem is the 
terms of the license needing review.

Jason

^ permalink raw reply	[flat|nested] 84+ messages in thread

* [Buildroot] Is GPLv2 the right license for Buildroot?
  2013-09-19  0:25                                     ` Jason Rennie
@ 2013-09-19 17:54                                       ` Yann E. MORIN
  0 siblings, 0 replies; 84+ messages in thread
From: Yann E. MORIN @ 2013-09-19 17:54 UTC (permalink / raw)
  To: buildroot

Jason, All,

On 2013-09-19 10:25 +1000, Jason Rennie spake thusly:
> On 19/09/2013 8:09 AM, Yann E. MORIN wrote:
> >But consider this:
> >   - you use Buildroot to build a GPL package, which ends up on the
> >     target
> >
> >   - that package is GPL, so the GPL applies to that package
> >
> >   - section 3 of the GPL requires you provide the "scripts used to
> >     control compilation and installation of the executable."
> >
> >   - So you have two options:
> >     - come up with the instructions by yourself (by looking at how
> >       Buildroot does its stuff, for example), but it's not trivial;
> >     - or provide your Buildroot tree (and .config) since this is the
> >       easiest. Let's assume that's the way you go.
> >
> >   - so, since you are distributing Buildroot, you have to abide by its
> >     license. It happens that this license is the GPL, but it's just
> >     happenstance that it is the same license as your GPL package, above.
> >
> 
> Wouldn't the intent of the license suggest that this was talking about the
> makefiles/configure scripts/whatever that you need to actually build the
> executable? Rather than some metabuild script like buildroot? I'm guessing
> the clause is there to stop someone "complying" by giving you a bunch of .c
> and .h files but not providing you a meaningful way to get an executeable
> out the other end.
> 
> The understanding you are suggesting would seem to be like requiring that
> the automated build script that runs on a build server of an evening (which
> calls the make files, maybe runs some automated tests etc, basically an
> automated developer task) would need to be included to distribute the
> software.

No, I never said that [*].
I said doing so would make complying _much easier_.

And since we're speaking on the Buildroot ML, I'm assuming the build
system in question is Buildroot, not some weirdo internal and
proprietary build system.

> As I said IANAL and so perhaps that would be required but that would seem
> like a bug in the license at that point and the problem is the terms of the
> license needing review.

Well, what is important is the _spirit_ of the license, as much as the
_letter_ of the license is.

Now, I believe we've gone as far as our uninformed opinions would get
us, and we won't be able to cover all cases, so we can safely close this
subject for now. ;-)

I'll try to gather all of this thread in a patch against the manual later
next week, and will submit that back here for further discussion. Thanks
all of you for your very valuable inputs! :-)


[*] In fact, I even never said that you had to, or did not have to
    provide it. I just said providing it makes complying very easy.
    YMMV, as they use to say! ;-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 84+ messages in thread

end of thread, other threads:[~2013-09-19 17:54 UTC | newest]

Thread overview: 84+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-08 13:15 [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization Thomas Petazzoni
2013-09-08 13:15 ` [Buildroot] [PATCH 1/3] Makefile: factorize *config dependencies Thomas Petazzoni
2013-09-11  2:06   ` rjbarnet at rockwellcollins.com
2013-09-11 17:39   ` Yann E. MORIN
2013-09-08 13:15 ` [Buildroot] [PATCH 2/3] Add support for BR2_EXTERNAL Thomas Petazzoni
2013-09-11  2:03   ` rjbarnet at rockwellcollins.com
2013-09-11 17:03     ` Yann E. MORIN
2013-09-11 17:12       ` Ryan Barnett
2013-09-12 21:05     ` Arnout Vandecappelle
2013-09-12 21:30       ` Ryan Barnett
2013-09-12 21:41         ` Arnout Vandecappelle
2013-09-12 21:51           ` Ryan Barnett
2013-09-12 21:57             ` Arnout Vandecappelle
2013-09-12 22:11               ` Ryan Barnett
2013-09-13 20:56                 ` Arnout Vandecappelle
2013-09-14  5:29                   ` Thomas Petazzoni
2013-09-11  2:07   ` rjbarnet at rockwellcollins.com
2013-09-12 21:04   ` Arnout Vandecappelle
2013-09-13  3:48     ` Thomas Petazzoni
2013-09-13  6:43       ` Tzu-Jung Lee
2013-09-13  7:10         ` Thomas Petazzoni
2013-09-13  7:47           ` Tzu-Jung Lee
     [not found]   ` <CAC2S8kiHUwNFprvvYd85UEGjDJhEX0Jgtb4e7Pd1vwwFGF7m_w@mail.gmail.com>
2013-09-12 21:53     ` [Buildroot] Fwd: " Ryan Barnett
2013-09-08 13:15 ` [Buildroot] [PATCH 3/3] docs/manual: add explanations about BR2_EXTERNAL Thomas Petazzoni
2013-09-11  2:09   ` rjbarnet at rockwellcollins.com
2013-09-12 21:46   ` Arnout Vandecappelle
2013-09-13  6:53     ` Thomas Petazzoni
2013-09-11  1:32 ` [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization rjbarnet at rockwellcollins.com
2013-09-11  7:17   ` Thomas Petazzoni
2013-09-11 15:55     ` Ryan Barnett
2013-09-11 17:27       ` Yann E. MORIN
2013-09-12  7:54         ` Thomas De Schampheleire
2013-09-12 18:21           ` Thomas Petazzoni
2013-09-12 18:25             ` ANDY KENNEDY
2013-09-12 18:33               ` Thomas Petazzoni
2013-09-12 18:44                 ` ANDY KENNEDY
2013-09-12 22:04                 ` Arnout Vandecappelle
2013-09-12 22:12                   ` Yann E. MORIN
2013-09-13 21:50                     ` Arnout Vandecappelle
2013-09-14 22:16                       ` Yann E. MORIN
2013-09-16 15:43                         ` ANDY KENNEDY
2013-09-16 17:30                           ` Yann E. MORIN
2013-09-16 18:26                             ` Thomas Petazzoni
2013-09-16 18:58                               ` ANDY KENNEDY
2013-09-16 16:21                         ` [Buildroot] Is GPLv2 the right license for Buildroot? Thomas Petazzoni
2013-09-16 17:08                           ` Yann E. MORIN
2013-09-16 17:45                             ` ANDY KENNEDY
2013-09-16 18:01                               ` Thomas Petazzoni
2013-09-16 18:16                                 ` Yann E. MORIN
2013-09-16 21:17                                 ` Peter Korsgaard
2013-09-18  1:50                                 ` Jason Rennie
2013-09-18  7:22                                   ` Peter Korsgaard
2013-09-18 22:09                                   ` Yann E. MORIN
2013-09-19  0:25                                     ` Jason Rennie
2013-09-19 17:54                                       ` Yann E. MORIN
2013-09-16 17:58                             ` Thomas Petazzoni
2013-09-16 18:15                               ` Yann E. MORIN
2013-09-16 18:24                                 ` Thomas Petazzoni
2013-09-16 18:56                                   ` ANDY KENNEDY
2013-09-16 20:04                                   ` Yann E. MORIN
2013-09-17  4:17                                     ` Thomas Petazzoni
2013-09-16 19:50                             ` Grant Edwards
2013-09-16 20:15                               ` Yann E. MORIN
2013-09-18  1:52                               ` Jason Rennie
2013-09-16 19:53                             ` Arnout Vandecappelle
2013-09-16 21:13                             ` Peter Korsgaard
2013-09-16 21:12                           ` Peter Korsgaard
2013-09-17  4:44                             ` Thomas Petazzoni
2013-09-17 14:53                               ` Grant Edwards
2013-09-17 15:17                                 ` Jeremy Rosen
2013-09-17 15:22                                   ` Grant Edwards
2013-09-17 15:29                                 ` Peter Korsgaard
2013-09-16 18:56                         ` [Buildroot] [PATCH 0/3] Support for out-of-tree Buildroot customization Arnout Vandecappelle
2013-09-12 22:07                 ` Yann E. MORIN
2013-09-12 22:28                   ` ANDY KENNEDY
2013-09-12 22:47                     ` Yann E. MORIN
2013-09-15 13:18                       ` Thomas De Schampheleire
2013-09-12 21:51             ` Yann E. MORIN
2013-09-13  7:35             ` Thomas De Schampheleire
2013-09-13 15:55               ` Ryan Barnett
2013-09-12 21:50           ` Yann E. MORIN
2013-09-12 18:18         ` Thomas Petazzoni
2013-09-12 22:24           ` Yann E. MORIN
2013-09-11  5:00 ` Baruch Siach

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.