В Линукс есть просто функции, напр. func(), а есть функции вида func_EXPORT_SYMBOL_GPL(). Первые может вызывать кто угодно, вторые - только код под GPL.Проблема 1: юридически крайне сложно написать лицензию так, чтобы разграничить что func() могут вызывать все, а func_EXPORT_SYMBOL_GPL() только код под GPL, поэтому есть споры о легальности (или нелегальности) вызова этих функций с точки зрения закона.
В Линукс есть возможность использовать LGPL, когда функции компилированного GPL модуля могут быть вызваны из не-GPL модуля.
Проблема 2: Oracle создала модуль под LPGL, функции которого тупо вызывают func_EXPORT_SYMBOL_GPL(). С одной стороны это легальная возможность, с другой backdoor лицензии GPL.