Hi,

Thanks for sharing progress!

There is no problem with the BSD 3-Clause license because
it's compatible with Apache License 2.0 and listed in
Category A:
https://www.apache.org/legal/resolved.html#category-a

> Category A: Licenses in Category A may be included in
> Apache Software Foundation products. They are said to be
> "Apache-like".


Thanks,
-- 
kou

In 
<mn2pr05mb6496dfaad283ab5ce98713ecae...@mn2pr05mb6496.namprd05.prod.outlook.com>
  "Re: [MATLAB] Integrating a framework for connecting MATLAB and C++ objects 
using MEX" on Wed, 13 Jul 2022 19:20:40 +0000,
  Kevin Gurney <kgur...@mathworks.com> wrote:

> Hi All,
> 
> I am following up to close the loop on this. Apologies for the delay. We had 
> to work through some technical and procedural issues before releasing the 
> code.
> 
> Updates:
> 
> 1. We decided to release the code under the BSD 3-Clause [1], rather than the 
> BSD 2-Clause license.
> 
> If there are any concerns about this licensing change, please let us know. 
> Our understanding is that BSD 3-Clause license should still be compatible 
> with the licensing of the upstream Arrow codebase. We apologize for the 
> confusion.
> 
> 2. Initial code has been released under the MathWorks GitHub organization in 
> a repository named "libmexclass" [2].
> 
> We chose the name "libmexclass" because the project aims to enable users to 
> implement MATLAB classes in terms of calls to corresponding C++ classes using 
> MEX [3].
> 
> The code is under active development and is not yet ready for integration 
> with the Arrow codebase. However, we wanted to get the code on GitHub as soon 
> as possible so that anyone who is interested can feel free to follow 
> development progress. We welcome any contributions from Arrow community 
> members!
> 
> Once the code has matured a bit more, we will work with the Arrow community 
> to update the build infrastructure for the MATLAB Interface to Arrow to make 
> use of libmexclass. Our hope is that using libmexclass will help unblock and 
> streamline development efforts for the MATLAB interface.
> 
> Thank you again to the community for providing helpful feedback and enabling 
> us to move forward.
> 
> [1] https://github.com/mathworks/libmexclass/blob/main/LICENSE
> [2] https://github.com/mathworks/libmexclass
> [3] https://www.mathworks.com/help/matlab/call-mex-files-1.html
> 
> Best Regards,
> 
> Kevin Gurney
> ________________________________
> From: Sutou Kouhei <k...@clear-code.com>
> Sent: Sunday, June 12, 2022 10:12 PM
> To: dev@arrow.apache.org <dev@arrow.apache.org>
> Cc: Fiona La <fion...@mathworks.com>; Jeremy Hughes <jhug...@mathworks.com>; 
> Nick Haddad <nhad...@mathworks.com>; Kevin Gurney <kgur...@mathworks.com>
> Subject: Re: [MATLAB] Integrating a framework for connecting MATLAB and C++ 
> objects using MEX
> 
> +1
> 
> In 
> <mn2pr05mb6496c7164ff07547514ffaf7ae...@mn2pr05mb6496.namprd05.prod.outlook.com>
> "Re: [MATLAB] Integrating a framework for connecting MATLAB and C++ objects 
> using MEX" on Fri, 10 Jun 2022 18:22:47 +0000,
> Kevin Gurney <kgur...@mathworks.com> wrote:
> 
>> Hi Kou,
>>
>> Thank you for helping to clear up our confusion.
>>
>>> How do we install the object dispatch layer to use it in
>>> apache/arrow? I assumed that something like the following:
>>>
>>> ----
>>> $ git clone 
>>> https://github.com/mathworks/object-dispatch-layer.git<https://github.com/mathworks/object-dispatch-layer.git>
>>> $ cd object-dispatch-layer
>>> $ cmake -S . -B build ...
>>> $ cmake --build build
>>> $ cmake --install build
>>> $ git clone 
>>> https://github.com/apache/arrow.git<https://github.com/apache/arrow.git>
>>> $ cd apache/matlab
>>> $ cmake -S . -B build # This find installed object-dispatch-layer
>>> $ cmake --build build
>>> $ cmake --install build
>>> ----
>>>
>>> My assumption is right?
>>
>> Your understanding is correct. Thanks for checking.
>>
>>> BTW, why do you want to use "git submodule" to use the
>>> object dispatch layer? Why don't you install it separately
>>> or build by externalproject_add() in CMake?
>>> https://cmake.org/cmake/help/latest/module/ExternalProject.html<https://cmake.org/cmake/help/latest/module/ExternalProject.html><https://cmake.org/cmake/help/latest/module/ExternalProject.html<https://cmake.org/cmake/help/latest/module/ExternalProject.html>>
>>
>> After reflecting on your response, we realize that using a git submodule 
>> seems like a less than ideal solution.
>>
>> Initially, we were thinking that if code within the apache/arrow repository 
>> were to "depend" on some MATLAB files from the object dispatch layer, that 
>> we would need to "physically" (via vendoring or IP Clearance) or "virtually" 
>> (via git submodule) integrate this code into the apache/arrow source tree. 
>> However, since these files are only needed at build time / run time, this 
>> means that the object dispatch layer code does not necessarily need to be 
>> redistributable along with the rest of the code in the apache/arrow 
>> repository.
>>
>> It seems much clearer now that the object dispatch layer can be treated as a 
>> "pure" external "library" dependency, and thus, the code should not need to 
>> be present in the apache/arrow repository. Per your suggestion, at build / 
>> install time, it should be possible to copy any required MATLAB files or C++ 
>> header files to appropriate locations, so that they can be used by CMake and 
>> MATLAB.
>>
>> Using externalproject_add() is a great idea and seems more "in-model" than 
>> repeatedly bumping the version of a vendored copy of the object dispatch 
>> layer source or using a git submodule.
>>
>> To summarize, it sounds like a reasonable path forward would be to:
>>
>> 1. Develop the object dispatch layer in an external repository underneath 
>> the MathWorks GitHub organization, with a 2-Clause BSD license.
>> 2. Use externalproject_add() to fetch and build the source code dynamically.
>>
>> Once the object dispatch layer is available on GitHub, I will follow up on 
>> this email thread with a link to the repository so that anyone in the 
>> community can track development progress, as well as contribute to the 
>> framework, if they are interested.
>>
>> If anyone has any objections to this approach, please let us know.
>>
>> Thank you!
>>
>> Kevin Gurney
>>
>> ________________________________
>> From: Sutou Kouhei <k...@clear-code.com>
>> Sent: Friday, June 10, 2022 4:13 AM
>> To: dev@arrow.apache.org <dev@arrow.apache.org>
>> Cc: Kevin Gurney <kgur...@mathworks.com>; Fiona La <fion...@mathworks.com>; 
>> Jeremy Hughes <jhug...@mathworks.com>; Nick Haddad <nhad...@mathworks.com>
>> Subject: Re: [MATLAB] Integrating a framework for connecting MATLAB and C++ 
>> objects using MEX
>>
>> Hi,
>>
>>> 1. A developer would author a custom MEX function that
>>> uses C++ "building blocks" (i.e. classes and header files)
>>> from the object dispatch layer "framework". They would
>>> link their custom MEX function against a helper shared
>>> library that is built from the source code of the object
>>> dispatch layer and provides the symbols/implementation for
>>> the aforementioned C++ "building blocks".
>>
>> How do we install the object dispatch layer to use it in
>> apache/arrow? I assumed that something like the following:
>>
>> ----
>> $ git clone 
>> https://github.com/mathworks/object-dispatch-layer.git<https://github.com/mathworks/object-dispatch-layer.git><https://github.com/mathworks/object-dispatch-layer.git<https://github.com/mathworks/object-dispatch-layer.git>>
>> $ cd object-dispatch-layer
>> $ cmake -S . -B build ...
>> $ cmake --build build
>> $ cmake --install build
>> $ git clone 
>> https://github.com/apache/arrow.git<https://github.com/apache/arrow.git><https://github.com/apache/arrow.git<https://github.com/apache/arrow.git>>
>> $ cd apache/matlab
>> $ cmake -S . -B build # This find installed object-dispatch-layer
>> $ cmake --build build
>> $ cmake --install build
>> ----
>>
>> My assumption is right?
>>
>>> Essentially, for a developer to use the object dispatch
>>> layer, they will need to author a fair amount of custom
>>> code which makes use of both MATLAB and C++ "building
>>> blocks" from the "framework".
>>
>> I think that this is a normal library usage. For example,
>> our S3 filesystem module implementation in C++ has about
>> 2500 lines and uses classes provides by AWS SDK C++:
>> https://github.com/apache/arrow/blob/master/cpp/src/arrow/filesystem/s3fs.cc<https://github.com/apache/arrow/blob/master/cpp/src/arrow/filesystem/s3fs.cc><https://github.com/apache/arrow/blob/master/cpp/src/arrow/filesystem/s3fs.cc<https://github.com/apache/arrow/blob/master/cpp/src/arrow/filesystem/s3fs.cc>>
>>
>>
>>> If we had to go through the IP Clearance Process, would
>>> that mean we would need to repeatedly clear the code every
>>> time we wanted to sync up the git submodule with the
>>> latest source code from the external repository? It seems
>>> like this would quickly become impractical since we
>>> anticipate the need to iterate frequently on the object
>>> dispatch layer early on.
>>
>> If the object dispatch layer doesn't depend on Apache Arrow
>> and is a general purpose framework, we can vendor it without
>> IP clearance.
>> e.g.: 
>> https://github.com/apache/arrow/tree/master/cpp/src/arrow/vendored/xxhash<https://github.com/apache/arrow/tree/master/cpp/src/arrow/vendored/xxhash><https://github.com/apache/arrow/tree/master/cpp/src/arrow/vendored/xxhash<https://github.com/apache/arrow/tree/master/cpp/src/arrow/vendored/xxhash>>
>>
>> BTW, why do you want to use "git submodule" to use the
>> object dispatch layer? Why don't you install it separately
>> or build by externalproject_add() in CMake?
>> https://cmake.org/cmake/help/latest/module/ExternalProject.html<https://cmake.org/cmake/help/latest/module/ExternalProject.html><https://cmake.org/cmake/help/latest/module/ExternalProject.html<https://cmake.org/cmake/help/latest/module/ExternalProject.html>>
>>
>>
>> Thanks,
>> --
>> kou
>>
>> In 
>> <byapr05mb648755bee2e0caccb0f407d9ae...@byapr05mb6487.namprd05.prod.outlook.com>
>> "Re: [MATLAB] Integrating a framework for connecting MATLAB and C++ objects 
>> using MEX" on Wed, 8 Jun 2022 15:59:13 +0000,
>> Kevin Gurney <kgur...@mathworks.com> wrote:
>>
>>> Hi Kou,
>>>
>>> ---
>>>
>>> Note: I am replying to your email as a forward from Fiona (Cc'd) since your 
>>> original email was accidentally blocked by my email client).
>>>
>>> ---
>>>
>>> The way that we expected the object dispatch layer to be used by client 
>>> code is as follows:
>>>
>>> 1. A developer would author a custom MEX function that uses C++ "building 
>>> blocks" (i.e. classes and header files) from the object dispatch layer 
>>> "framework". They would link their custom MEX function against a helper 
>>> shared library that is built from the source code of the object dispatch 
>>> layer and provides the symbols/implementation for the aforementioned C++ 
>>> "building blocks".
>>>
>>> 2. The object dispatch layer expects the compiled MEX function to have a 
>>> specific name and be available on the MATLAB Search Path [1] so that it can 
>>> be used by the MATLAB side of the object dispatch layer.
>>>
>>> 3. Once the MEX function is available on the MATLAB Search Path, client 
>>> MATLAB code can use a set of MATLAB "building blocks" (i.e. classes), which 
>>> are part of the object dispatch layer "framework", to connect a MATLAB 
>>> class with a corresponding C++ class.
>>>
>>> Essentially, for a developer to use the object dispatch layer, they will 
>>> need to author a fair amount of custom code which makes use of both MATLAB 
>>> and C++ "building blocks" from the "framework".
>>>
>>> It's not clear to me whether the steps described above classify as "library 
>>> usage" with regard to the IP Clearance Process.
>>>
>>> If we had to go through the IP Clearance Process, would that mean we would 
>>> need to repeatedly clear the code every time we wanted to sync up the git 
>>> submodule with the latest source code from the external repository? It 
>>> seems like this would quickly become impractical since we anticipate the 
>>> need to iterate frequently on the object dispatch layer early on.
>>>
>>> It's quite possible that I am not answering your questions completely, so 
>>> please let me know if anything is unclear. My apologies in advance for any 
>>> confusion.
>>>
>>> [1] 
>>> https://www.mathworks.com/help/matlab/matlab_env/what-is-the-matlab-search-path.html
>>>
>>> Best,
>>>
>>> Kevin Gurney
>>>
>>> ________________________________
>>> From: Fiona La <fion...@mathworks.com>
>>> Sent: Wednesday, June 8, 2022 11:24 AM
>>> To: Kevin Gurney <kgur...@mathworks.com>
>>> Subject: FW: [MATLAB] Integrating a framework for connecting MATLAB and C++ 
>>> objects using MEX
>>>
>>>
>>>
>>>
>>>
>>>
>>> From: Sutou Kouhei <k...@clear-code.com>
>>> Date: Tuesday, June 7, 2022 at 8:36 PM
>>> To: dev@arrow.apache.org <dev@arrow.apache.org>
>>> Cc: Fiona La <fion...@mathworks.com>, Jeremy Hughes 
>>> <jhug...@mathworks.com>, Nick Haddad <nhad...@mathworks.com>
>>> Subject: Re: [MATLAB] Integrating a framework for connecting MATLAB and C++ 
>>> objects using MEX
>>>
>>> Hi,
>>>
>>> Can we use the object dispatch layer as a library? Or should
>>> we copy (or submodule) the object dispatch layer to
>>> apache/arrow?
>>>
>>> If we can use the object dispatch layer as a library, we can
>>> just use it as an external library like GoogleTest. We don't
>>> need IP clearance. You can use any Apache License 2.0
>>> compatible license for the object dispatch layer.
>>>
>>> Thanks,
>>> --
>>> kou
>>>
>>> In 
>>> <mn2pr05mb6496cff053c60e54c133c93cae...@mn2pr05mb6496.namprd05.prod.outlook.com>
>>> "[MATLAB] Integrating a framework for connecting MATLAB and C++ objects 
>>> using MEX" on Tue, 7 Jun 2022 18:10:43 +0000,
>>> Kevin Gurney <kgur...@mathworks.com> wrote:
>>>
>>>> Hi All,
>>>>
>>>> I am reaching out to seek guidance from the community regarding a code 
>>>> integration puzzle.
>>>>
>>>> The architecture that we are currently pursuing for the MATLAB interface 
>>>> to Arrow [1] involves dispatching to the Arrow C++ libraries using MEX (a 
>>>> MATLAB facility for calling C/C++ code [2]). A major challenge with this 
>>>> approach has been keeping Arrow C++ objects (e.g. arrow::Array) alive in 
>>>> memory for the appropriate amount of time and making it easy to interface 
>>>> with them from MATLAB.
>>>>
>>>> MATLAB has a recommended solution for this problem [3]. However, we've 
>>>> been pursuing a MEX-based solution due to the pervasiveness of MEX and its 
>>>> familiarity to MATLAB users. Our hope is that using MEX will make it easy 
>>>> for others to contribute to the MATLAB interface.
>>>>
>>>> To help maintain the connection between MATLAB objects and C++, we've been 
>>>> experimenting with a MEX-based object dispatch layer. The primary goal of 
>>>> this work is to unblock development of the MATLAB interface to Arrow. 
>>>> However, this object dispatch layer is non-trivial and ultimately 
>>>> unrelated to the Arrow project's core mission. Therefore, submitting this 
>>>> code to the Arrow project doesn't seem like the optimal code integration 
>>>> strategy.
>>>>
>>>> We’ve been considering the possibility of creating a new open-source 
>>>> repository under the MathWorks GitHub organization [4] to host the object 
>>>> dispatch layer (a side effect of this approach is that it may help 
>>>> encourage reuse of this infrastructure in future open-source MATLAB 
>>>> projects).
>>>>
>>>> However, this approach would come with notable tradeoffs:
>>>>
>>>> 1. We would need to follow the ASF IP Clearance Process [5] to integrate 
>>>> this code into the Arrow project (it's possible we are mistaken about 
>>>> this).
>>>>
>>>> 2. It's not obvious how we should keep the code in sync. Would it be 
>>>> possible to use a git submodule [6] to "symlink" to the external repo?
>>>>
>>>> 3. What about licensing? Does the code need to be Apache licensed, or 
>>>> would it be possible to use another Apache-compatible license [7], like 
>>>> BSD? BSD is the default choice for new projects hosted under the MathWorks 
>>>> GitHub organization.
>>>>
>>>> Admittedly, we aren't sure what the best path forward is, so we appreciate 
>>>> the community's guidance. We welcome any suggestions.
>>>>
>>>> [1] 
>>>> https://github.com/apache/arrow/tree/master/matlab<https://github.com/apache/arrow/tree/master/matlab><https://github.com/apache/arrow/tree/master/matlab<https://github.com/apache/arrow/tree/master/matlab>><https://github.com/apache/arrow/tree/master/matlab<https://github.com/apache/arrow/tree/master/matlab><https://github.com/apache/arrow/tree/master/matlab<https://github.com/apache/arrow/tree/master/matlab>>>
>>>> [2] https://www.mathworks.com/help/matlab/call-mex-files-1.html
>>>> [3] 
>>>> https://www.mathworks.com/help/matlab/build-matlab-interface-to-c-library.html
>>>> [4] 
>>>> https://github.com/mathworks<https://github.com/mathworks><https://github.com/mathworks<https://github.com/mathworks>><https://github.com/mathworks<https://github.com/mathworks><https://github.com/mathworks<https://github.com/mathworks>>>
>>>> [5] 
>>>> https://incubator.apache.org/ip-clearance/<https://incubator.apache.org/ip-clearance><https://incubator.apache.org/ip-clearance<https://incubator.apache.org/ip-clearance>><https://incubator.apache.org/ip-clearance<https://incubator.apache.org/ip-clearance><https://incubator.apache.org/ip-clearance<https://incubator.apache.org/ip-clearance>>>
>>>> [6] 
>>>> https://github.blog/2016-02-01-working-with-submodules/<https://github.blog/2016-02-01-working-with-submodules><https://github.blog/2016-02-01-working-with-submodules<https://github.blog/2016-02-01-working-with-submodules>><https://github.blog/2016-02-01-working-with-submodules<https://github.blog/2016-02-01-working-with-submodules><https://github.blog/2016-02-01-working-with-submodules<https://github.blog/2016-02-01-working-with-submodules>>>
>>>> [7] 
>>>> https://www.apache.org/legal/resolved.html#category-a<https://www.apache.org/legal/resolved.html#category-a><https://www.apache.org/legal/resolved.html#category-a<https://www.apache.org/legal/resolved.html#category-a>><https://www.apache.org/legal/resolved.html#category-a<https://www.apache.org/legal/resolved.html#category-a><https://www.apache.org/legal/resolved.html#category-a<https://www.apache.org/legal/resolved.html#category-a>>>
>>>>
>>>> Thank you,
>>>>
>>>> Kevin Gurney

Reply via email to