Hello everyone.
Here are the results from the survey.
The data from this question shows a very broad spread of survey respondents across the world, and it’s difficult to present it in ways that are more useful than a simple summary. The top countries are:
US: 23%
UK: 13%
Germany: 11%
France: 8%
Canada: 5%
We had to do a bit of data processing for this. Despite the question description stating that not ranking a topic at all would count as a zero, almost everyone ranked everything with a minimum score of one. Next time we won’t rely upon the question description and we’ll have the scale go from 0 → 5 rather than 1 → 5. All 1 → 5 responses were shifted to being 0 → 4, and the scores from the few people who only ranked only the topics they thought were important (0 → 5) had their scores multiplied by 0.8.
Even with everyone’s responses being adjusted to start from zero, we can see that there are significant numbers of people voting for all of the proposed topics. Whilst there is a single clear winner for the Indie and Pro segments, everything else is less distinct.
Are there any other ways that JUCE could be improved for you?
There are a few general themes from this question.
The most mentioned topics are WebAssembly support and JUCE GUIs in embedded browsers. For the people who mentioned this we have some good news - a substantial piece of JUCE 8 will be the ability to interact with the javascript and DOM of JUCE’s web views, giving JUCE users the ability to do all of their GUI work in HTML, CSS, and JS. Once we have this in place we will look at WebAssembly support too.
There were also several requests for a system that would provide a declarative JUCE UI. This would be a massive chunk of work with a near constant ongoing maintenance burden, which we have already experimented with in previous versions of the Projucer. Once we have JUCE GUIs in embedded browsers released we will have taken a big step towards the declarative benefits of modern web GUI frameworks.
All other topics were spread pretty thinly, though we can address a few of them quickly here. We are improving font handling in JUCE 8, including better unicode support and fallback fonts. Sample accurate automation improvements will be bundled into our ongoing MIDI 2.0 support work. A useful CMake exporter from the Projucer is probably much more work than you expect and the team’s time is almost certainly better spent elsewhere.
Finally, lots of people requested that we get rid of most private sections of the classes in the API, and avoid using things like the pimpl idiom. Though I can understand the motivation for suggesting this, it would bring JUCE development itself to a standstill. We absolutely rely upon the ability to change the implementation details of JUCE’s functionality to fix bugs and keep on top of changes in the underlying operating systems. This is a fundamental principle of sustainable API development. This isn’t to say that we can never open up some of our classes a little more, but we have to think long and hard before making anything public. Once something is public, it, and any other indirect behaviours it invokes, cannot be changed without us having to intoduce a breaking change (see Hyrum’s Law). If there’s a part of JUCE that you think needs to be public please give us very specific feedback about what functionality you need.
MinGW on Windows has always been awkward for us to support, and even before this survey we had decided to remove the Code::Blocks exporter from the Projucer. Very occasionally people new to JUCE would attempt to use Code::Blocks with its bundled MinGW on Windows and end up frustrated. The bundled version of MinGW is now also old enough to cause compatibility problems with the rest of JUCE, and using MinGW directly with CMake on Linux is overall an easier build system to navigate. At the moment the Code::Blocks exporter is deprecated, and it will be removed in JUCE 8.
* Xcode 14.1 is currently the minimum required to submit to the iOS app store
* iOS 11 is currently the oldest deployment target possible on the App Store
Why do people need the latest version of JUCE to be compaible with iOS versions older than iOS 11? If you are using the latest version of JUCE then you must be creating new versions of iOS software. If these new versions cannot be distributed on the App Store it’s not obvious how they are being used. Internal development on old hardware? Please let us know!
* Google Play will require existing apps to target API level 31 from August 31, 2023, to remain discoverable
** Google Play will require new apps to target API level 33 from August 31, 2023
We’re very pleased with these results, particularly since the majority of the non-positive responses were qualified by people describing problems with C++ or other tooling rather than JUCE itself. We tried to avoid some of this by specifying “C++ framework” in the question, but it wasn’t very effective. JUCE is, fundamentally, a C++ framework, and if you don’t yet have a reasonable grasp of C++ then using JUCE will be a challenge.
This is another very satisfying result. The JUCE team really cares about both the framework and the people using it, and getting feedback like this is delightful.
As with the “JUCE is an easy C++ framework to use” responses a lot of the negative scores here are from people frustrated that they can’t make a plug-in without also having a working knowledge of C++. Given that JUCE is a C++ framework some knowledge of C++ feels like a reasonable starting requirement. Removing those scores makes the results look even better, but we’ve kept them in. Other than a couple of people asking us to switch to Rust there were no other responses suggesting an alternate programming language.