319 karma · joined August 25, 2012
For Mojo, I'm interested in seeing how the language can be used as a path forward for the Cython community. This could be a stepping-stone towards reimplementation of Python in Mojo. For the past 3 year, I have been talking about the need for a Python-Steering-Council-recommended extension language for Python. This will be particularly important as WebAssembly keeps progressing and potentially redefining what we mean by virtualization and containers.
We have already been using LLVM extensively in Numba and there have been several explorations around MLIR and related technologies. There are several potential paths forward and I'm looking forward to finding ways to cooperate.
Understanding what will be open-source is of course, critical for that.
There is some work to bring it up to 3.12 and some resistance to merge it into 3.X because of the impact on extension modules (they all have to be recompiled and in some cases changed a bit).
If you are interested in it, reach out to Sam. He has done a pretty impressive piece of engineering work.
I am sincerely interested in seeing if the HackerRank leadership will reach out and discuss. I was not intending to promote anything I'm doing right now. I suspect they won't but I will talk to them respectfully if they do.
Let's promote the SymPy maintainers, though. Let's also promote NumFOCUS, because they do a valuable service to community-driven projects and could help SymPy respond to this sensibly. Let's also promote NumFOCUS because they efficiently and tirelessly work to help the projects they fiscally sponsor (like SymPy) -- providing legal support: https://numfocus.org/.
Perhaps something good can come out of this, still.
I appreciate the "fix-it-twice" attitude implied by the RCA promise (Root Cause Analysis for those who also had to look it up). Also, consider recognition and restitution for the unnecessary work you created for the NumFOCUS director, a NumFOCUS lawyer, and the SymPy maintainers.
A $25k donation to NumFOCUS would be a good start.
If you are willing to talk about what happened publicly, I'm starting a podcast/video series to discuss business and open-source. This would make an interesting conversation. Perhaps we can turn this into a positive to raise awareness and inspire better behavior in the industry? Ping me.
It currently emits Cython for the C-backend (and PyIodide). It is very alpha currently, but if people are interested in helping, get in touch.
Business owners and managers do need to understand that they may have to rewrite the software from the ground up because the first version will have all the problems the author talks about.
Most business owners and managers actually do understand this already. The goal of the first version is not to be architecturally perfect. The goal of the first version is to see if anyone will care if it exists. This is a good argument for not always building on the first version of a startup idea -- but actually build it again once you know people will buy.
He introduced me to the ideas in this paper that he induced from his own observations of his “mystical” experiences.
It is fascinating to realize these self models exist in a wide variety of animals and the modeling of others is what makes some animals different.
In “Sapiens” https://books.google.com/books/about/Sapiens.html
Yuval Harari argues that Homo sapiens took over all other Homo species because of the development of “myth” which may be related to the Hyperactive attribution of consciousness referenced in the article. Humans cooperate at scale much better than any other species (but also fight at scale more aggressively) because we can communicate about abstractions.
Very interesting inter-related ideas.
The real challenge comes, however, as you try to build an ecosystem of libraries on top of multiple different APIs. You end up reinventing the wheel or struggling to maintain multiple versions of the same library.
Some cooperation is immensely helpful at the lowest level, and we hope ultimately to be helpful to the different tool builders in providing information and guidance about what is already a standard and agreed upon in the space.
This is not about establishing or forcing behavior. It is about documenting and clarifying best practices that have already emerged as well as potentially giving libraries a way to signal to downstream developers of additional libraries that they adhere to the standard.
My own thoughts go in the direction of maybe the right thing to do is different at different "scales". The right thing to do in my family is different than the right thing to do in my job which is probably different than the right thing to do at the city level, the county level, the state level, the nation level, and the world level (to use labels appropriate for the USA). Leaders at each level have a different decision to make and things work better the more people we have making "good" decisions at each level. The process of figuring out what "good" decisions at each level is the really hard part that is not easily wrapped up with platitudes, memes, or other projections into a single one-dimensional axis (i.e. left vs. right) of a high-dimensional, multi-attribute space.
I have had the privilege of watching open-source projects I started or participated in get used by millions. I want to see a world where more people are paid a great living to work on open-source software. There are several approaches to improving the funding fabric for open-source. OpenTeams is one of them. Quansight Initiate (http://www.qi.ventures) is another one. Quansight Labs (http://labs.quansight.org) and Quansight (http://www.quansight.com) are others. A group of us are also working on a few other ideas including FairOSS (not going to give the website because it is a behind-the scenes operation for now --- ping me if you are interested in learning more).
I have spent many years writing open-source software, improving open-source ecosystems, hiring open-source developers, and paying people to work on open-source software. I have also spent the past 12 years in particular working in industry watching open-source get used and seeing the disconnect between open-source usage and open-source communities.
There are several business models that can work to improve things. With OpenTeams we are building out a platform and ecosystem to help open-source communities thrive by directing money from industries that use them to the communities that exist while also learning from the basic laws of incentive alignment and local choice making that are at the heart of every economy.
One of my core believes is that not all software will be or should be open source. I don't make this conclusion lightly. However all software will be based on and use open source foundations. Those communities that produce these foundations should be able to thrive and yet retain their freedom and self direction.
OpenTeams is a platform to make that happen by connecting companies that use open-source and want to fund specific features and improvements with organizations that hire open-source developers to work on proposals that have input from community participants and leaders. Some initiatives will be new projects, some will be usability improvements and feature proposals for existing projects. An effect of OpenTeams is also to enable a place for all open-source contributors to build their reputation (not just contributions that lead to pull-requests).
We are in a pre-alpha stage at the moment, but will be continuing to add features and are open to suggestions and ideas.
Thanks for your feedback.
You can generate money only through free software, however. Here are three approaches I have found: 1) Consult on projects that use the free software and use some of the profits to support that free software, 2) Sell enterprise-grade support on the free software to big companies. This is much more than just help-desk and answer the phone. All commercial software comes with a big contract. You provide the same kind of contract just no license restrictions. Others can do the same and so you have to distinguish yourself by either having all or most of the experts on the software or just really good marketing. 3) Dual license using GPL3/AGPL for the free version and a commercial license and then aggressively go after people for GPL violations if they don't get the commercial license.
I don't like the relationships created by the third model --- your sales processes become aggressive and counter-service minded by definition. I don't see it scaling and really providing value.
The other two are really hard to impossible to get investors exited about and therefore you struggle to get the capital together you need to prime the customer pump.
There is a another general model with many corollaries where you basically "do something else" that uses the software as a critical part of the business and let the profits of that activity fund open-source development.
A lot of open-source these days is actually funded by this kind of activity (or from VC's hoping to profit from a promise of great wealth from this kind of activity).
I knew what I was getting into when I wrote NumPy. I knew there was not a clear way to support my family by releasing open source software, and I knew I was risking my academic career.
I did it because I believed in the wider benefit of ideas that can be infinitely shared once created and the need for software infrastructure to be open-source --- especially to empower the brightest minds to create. I did it because others had done it before me and I loved using the tools they created. I hoped I would inspire others to share what they could.
There have been a lot of people who have helped over the years. From employers willing to allow a few hours here and there to go to the project, to community members willing to spend nights and weekends with you making things work, to investors (at Continuum) willing to help you build a business centered on Open Source.
There are many people who are helping to fix the problem. In 2012, I had two ideas as to how to help. Those who know me will not be surprised to learn that I pursued both of them. One was the creation of NumFOCUS that is working as a non-profit to improve things. The second was the creation of Continuum (http://www.continuum.io) to be a company that would work to find a way to pay people to work on Open Source full-time.
We have explored several business models and actually found three that work pretty well for us. One we are growing with investors, a second we are continuing with, and another we are actually in the process of helping others get started with and ramping down on ourselves.
Along the way, I've learned that open source is best described in the business world as "shared R&D". To really take advantage of that R&D you need to particpate in it.
We call our group that does that our "Community Innovation" group. We have about 35 people in that group now all building open-source software funded via several mechanisms.
We are looking for people to help us continue this journey of growing a company that resonantly contributes significantly to Open Source as part of its mission. If you are interested, contact me --- I am easy to track down via email.
NumPy built on Numeric which was primarily written by Jim Hugunin while he was a grad student at MIT. While I was a professor at BYU, I wrote the the core of NumPy with a lot of community input -- outside of my regular job. I sold a book "Guide to NumPy" for a while that I used to replace the grants I should have been writing and pay for a grad student to help write iterative solvers for SciPy. Chuck Harris joined the NumPy effort early and has been steadily contributing ever since without direct funding. Many others have contributed volunteer time since then.
A major reason I started Continuum was to help create places where people could get paid to write open-source. I am happy to say we have been doing this for 5 years though mostly outside core NumPy itself (Numba, Dask, Bokeh, conda, etc.) We are working to support many more open source projects more generally -- and our devs have now made additional contributions to NumPy itself. We have a thriving 40 person Community Innovation team at Continuum supporting many open source projects. I expect this funding to help bring more new people to the NumPy development ecosystem.
The community also started NumFOCUS at this same time to be a community-run foundation that could be a focal point for donations and support to projects including NumPy.
Nathaniel Smith wrote a great proposal and put the effort into securing this funding. It is real work to secure funding. I look forward to NumPy getting better for the benefit of all because of this work.
While we continue to develop those things, we are working on taking the core ideas in NumPy and creating a set of lower-level C and Python libraries that could be used by pandas, xarray, Numba, dask, arrow, and potentially NumPy: https://github.com/plures. This work is not directly related to the NumPy funding.
Numba provides speed-ups over NumPy and Python and does so in way very easy for Python programmers to use with decorators on Python functions. Numba can be used to easily build new "ufuncs" which are NumPy's universal functions and it has multiple interfaces for programming the GPU directly from Python for even higher performance.
For other plugins there is very nice integration so that you can have interactions in one plugin update outputs in another and vice-versa.
The ease of creating a connected ecosystem of web-applications connected to your workflow is one of the powerful aspects of the new platform.
What would great integration look like to you?
However, I felt there would be more innovation around the programming language itself (think decorators, generators, futures, compilers, and coroutines). The boundary region between "applied-math-programming" and general purpose computing requires a lot of sometimes tedious work. Having a general purpose computing language would mean that more people would be available for that work.
Even now, one of the principal challenges of NumPy which is the foundation of the Python scientific stack is that it combines applied math (fft, linear algebra, polynomials) with computer-science (type systems, data-structures, and multiple-dispatch functionals). Maintaining all of that with one group of people is difficult.
If we could re-factor the NumPy code base into 1) a data-declaration type system --- i.e. look at datashape.pydata.org which is a generalization of dtype, 2) a multiple-dispatch generic function system (the ufuncs) and then 3) a container object. These could all be maintained by separate groups (and even #1 and #2 could be pulled into the Python language itself). See the libdynd project for a reference example of what it could look like.
Then NumPy could be maintained as a set of math libraries on top of that.
Then, it would be relatively straightforward to build the octave DSL on top of the Python computing stack and we would be able to share work.