History: How to pick a software library
Source of version: 28 (current)
Copy to clipboard
^"Picking your team is 90 percent of the battle" -- [http://www.amazon.com/Six-Fundamentals-Success-Yourself-Organization/dp/0385517246/|Stewart R. Levine]^
As seen at ((tw:Open Hub)), 90% of the code used to power Tiki comes from the larger PHP and JavaScript Open Source ecosystem.
Tiki is the ((tw:FLOSS Web Application with the most built in features)) and to do so in a sustainable way, it uses over 150 software libraries and ((tw:Model#Lots_of_features_but_no_duplication|avoids duplication)). This permits more and better functionality, while limiting the ((tw:Coping with Complexity|complexity)) and the quantity of work (technical debt). Please see ((doc:Composer)).
Related concept:
[https://en.wikipedia.org/wiki/Not_invented_here|Not invented here].
Given that
* Tiki avoids duplication to avoid http://pluginproblems.com/
* We'll limit our potential if we don't pick the best option
* It's possible but painful to change later
* Picking and maintaining dependencies is a critical skill because https://www.reddit.com/r/programming/comments/1z09jq/why_your_software_project_will_slowly_die_without/
it is very important to take the necessary time to analyze and decide on the right component to integrate.
!! General steps
# Scope the need in a wiki page on dev.tiki.org
# Add some options with some pros and cons
# Inform the ((Dev Mailing List)) of this process and invite anyone interested to participate
# Complete a thorough analysis
** Search on https://github.com/, https://packagist.org/, https://www.npmjs.com/, etc. with relevant keywords, filters and sorting. Ex.: https://github.com/search?q=teleprompter&type=repositories&s=stars&o=desc
** This can include a proof of concept with one or more of the options
** Make sure to identify which ones already work well with existing code in Tiki, or [https://wikisuite.org/|WikiSuite]
** If a popular project has been abandoned, there is very likely a https://useful-forks.github.io/
# Inform the ((Dev Mailing List)) of the options
# A community discussion ensues and a strategy is picked
# Implement the solution
# Be proud that the process was thorough and gave us the best possible chance of a smooth future for this functionality! :-)
!!! Some thoughts about UI trends
# Note that jQuery-UI is no longer being developed and we are trying to eliminate the existing dependencies.
# Even jQuery dependencies are being removed from other projects (Bootstrap 5 for instance) so although Tiki will need it for quite a few years yet adding more jQuery based projects is not ideal.
# The long term plan for the user interface is to use Vue.js where possible (hopefully one day replacing ((Gadgets|plugins and modules)) so please consider Vue 3 components if available.
!! Some examples
!!! Past
* ((Decision Analysis for Drag and Drop Library for usage in Tiki and Cypht))
* Around Tiki11: * Bootstrap vs Foundation vs staying with Tiki way
* Back around Tiki 2.0: ((CKEditor)) vs TinyMCE
* ((Slideshow framework stats comparison))
* ((Datavis Convergence))
!!! Future
* ((Link Preview))
* ((Signature))
* A Screencasting / screen capture / video editor
* Font picker?
* Emoji picker?
!! Types of libs
Perhaps we should have an adaptable policy depending on the type of lib? As discussed during ((tw:Roundtable-Meeting-2024-10))
* Widgets (ex.: Select 2)
* Complex integration and too big for us to maintain. Ex.: CKEditor
* Architectural: MariaDB, Manticore, etc.
* Abstracts a standard: SabreDAV
* etc.
!! Technology
* Our ideal situation is to pick a PHP lib available from https://packagist.org/ and works on standard PHP shared hosting.
* ((The Tiki 27 plus Build System)) adds a dependency on Node.js to build Tiki, but not to run Tiki
* If some functionality is realistically not practical or possible with PHP shared hosting, we can require a specific server configuration (and thus root access).
** This must be optional, like for ((doc:Realtime)) or ((doc:OCR))
!! Related links
* https://wikisuite.org/Component-criteria
{img type="src" src="https://imgs.xkcd.com/comics/dependency.png"}
!! Stats of Tiki dependencies
{HTML()}<script type='text/javascript' src='https://www.openhub.net/p/tiki-dependencies/widgets/project_factoids_stats?format=js'></script>{HTML}
{HTML()}<script type='text/javascript' src='https://www.openhub.net/p/tiki-dependencies/widgets/project_languages?format=js'></script>{HTML}
{HTML()}<script type='text/javascript' src='https://www.openhub.net/p/tiki-dependencies/widgets/project_cocomo?format=js'></script>{HTML}
Compare Tiki vs Tiki dependencies: https://openhub.net/p/_compare?project_0=Tiki+dependencies&project_1=Tiki+Wiki+CMS+Groupware
Some analysis: ((tw:Open Hub))