Development: Difference between revisions

From Official Kodi Wiki
Jump to navigation Jump to search
No edit summary
mNo edit summary
(44 intermediate revisions by 13 users not shown)
Line 1: Line 1:
{{cleanup}}
{{XBMC development nav}}
This page is about XBMC development in general. Operating system specific information can be found in the following pages.
{{mininav}}


* [[XBMC for Linux|XBMC for Linux development]]
__TOC__
* [[XBMC for Mac|XBMC for Mac development]]
{{-}}
* [[XBMC for Windows|XBMC for Windows development]]
== Topics ==
{{see also|Category:Development}}
{{development links}}


=XBMC programming and code formatting convention guidelines=
== Source code ==
:'''Note!''' More specifics to come based on ongoing discussions, see [http://forum.xbmc.org/showthread.php?t=5238 Proposed code formatting conventions for XBMC]
* See: https://github.com/xbmc/xbmc


==General guidelines==
== Development Tools ==
* Code documentation (DocBook, rst, or [http://www.doxygen.org doxygen] for the code documentation steps, preferably the latter, [http://www.doxygen.org doxygen])
* [http://www.stack.nl/~dimitri/doxygen/ Doxygen] - Source code documentation generator tool.
* Self-containment - XBMC should be as little dependent as possible on operating-system and third-party services/deamons/libraries
** XBMC should for example contain all file-system and network-client (like samba) support built-into the XBMC package
* Modular design - independent modules made up by localized/isolated code libraries without dependencies
** XBMC should still compile and run if a non-essential module/library is disabled or removed
* Aim for the GUI/interface to run smoothly on a low spec computer (single core with less than 1Ghz)
** 3D graphic controller (GPU) will always be required hardware for XBMC so try to utilize the GPU as much as possible
* Avoid harddisk trashing (excess read/write/erase cycles), so no harddrive paging, (utilize RAM memory instead).
** End-users will be running XBMC and the operating-system on Solid-State memory as a [http://en.wikipedia.org/wiki/LiveDistro Live CD (LiveDistro)] of a USB-key
* Fast load and boot times for end-user perception (other things can still run/start in the background without the user knowledge)
** 15-seconds or less from when the end user press the power-button on the computer till he/she can browse the GUI
 
==User-friendliness is next to godliness==
One of [[Team-XBMC]]'s major ongoing goal has always been to make XBMC and its [http://en.wikipedia.org/wiki/user_interface user interface] even more [http://en.wikipedia.org/wiki/intuitive intuitive] and [http://en.wikipedia.org/wiki/user-friendliness user-friendly] for its [http://en.wikipedia.org/wiki/End-user end-users], based on the '''KISS''' ('''K'''eep '''I'''t '''S'''imple '''S'''tupid) philosophy. We think that [http://en.wikipedia.org/wiki/Usability usability] is very important for media players like XBMC. Many user interface decisions are being made by developers who often have little experience in user interface design. In order to improve this, we try to listen to XBMC's end-users for how XBMC is actually being used and how we can improve the user experience. We also aim to do regular overhauls, improving existing features/functions, and scrapping outdated code and features/functions (as "too much stuff" can also be a bad thing).
 
==XBMC as a whole must...==
* Be easy to install, set up, and maintain, (so that the end-users do not get fed up with it and quit).
* Have a user interface simple and intuitive enough so that less geek-savvy people are not intimidated by it.
** Make common usage easy, simple '[http://en.wikipedia.org/wiki/Human-computer_interaction Human–Computer Interaction (HCI)]', from the viewpoint of an ordinary user.
* Be able to play audio and video files that have been compressed using divx, xvid, etc. directly out-of-the-box
* Be able to and organize audio and video files in an easy and user-friendly way.
* Use standards and be consistent, (for example, the music section cannot use completely different controls from the video section)
* Perform actions in the GUI with as few 'clicks' as possible
* Require little to none non-GUI configuration (and all such non-GUI config should be via [[advancedsettings.xml]])
* Look nice.
 
==XBMC developers should always strive to==
* '''Promote open source''' - XBMC is based on the ideas of FOSS (free open source software), licensed under the GPL and builds partly on other open source projects which we do our best to support. The GPL should be respected at all times. All code should be committed to the XBMC project’s SVN before any public binaries are released.
* '''Promote the sharing of knowledge and collaboration''' - Through the use of information sharing tools and practices XBMC is a collaborative environment.
* '''Understand that development is a team effort''' - Treating our users as co-developers has proven to be the most effective option for rapid development. Always strive to work as a team at all times. Actively promote discussion on new features and bug fixes, and respect others comments and criticisms with replies in a timely fashion.
* '''Apply the Law of Diminishing Return''' - The majority of the effort should be invested in implementing features which have the most benefit and widest general usage by the community.
* '''Try to make all code, feature, and functions to be platform agnostic''' - XBMC is a multi-platform software, thus any single platform specific features should be discussed with other team members before being implemented. Major features should be developed in a separate branch or committed in small increments so that other members have the opportunity to review the code and comment on it during development.
 
=Technical summary of XBMC=
==The basics==
The XBMC code structure uses a fairly [http://en.wikipedia.org/wiki/Module_%28programming%29 modular design] (with [http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] and [http://en.wikipedia.org/wiki/Dynamic-link_library DLL]s), and we think that there are enough modules/libraries to keep a wide skill-level range of developers busy for a while in the porting of them all. So please, take a look at the source code, then with the help of our To-Do list (see further down in this article) assess where the porting stage is today and think about where and how you can try to help out. Note that we are not planning on completely abandoning the Xbox hardware any time soon - XBMC will be a [http://en.wikipedia.org/wiki/Cross-platform cross-platform] software application, using the same code on multiple hardware platforms, (the 'old' Xbox still have a good amount of years to live we hope).


==Detailed technical information==
== People who can help you with specific development areas of Kodi ==
For more details please visit the [[Development Notes]] section of this manual.
{{main|Development advisors}}
{{intro|Development advisors}}


==HOW-TO compile XBMC from source code==
== Other tools and resources ==
The XBMC source code is in our SVN repository on sourceforge.net. Full instructions for compiling/building XBMC on your operating system are available:
* [[HOW-TO compile XBMC for Windows from source code|HOW-TO compile XBMC from source code on Windows]]
* [[HOW-TO compile XBMC for Linux from source code|HOW-TO compile XBMC from source code on Linux]]
* [[HOW-TO compile XBMC for Mac OS X from source code|HOW-TO compile XBMC from source code on Mac OS X]]
 
==Development Tools==
* [http://www.stack.nl/~dimitri/doxygen/ Doxygen] - Source code documentation generator tool.
 
==Other tools and resources==
Though any other tools or resources are not required they can possibly help in development.
Though any other tools or resources are not required they can possibly help in development.
* [[Eclipse CDT Setup For XBMC Development]]
* [[Eclipse CDT Setup For XBMC Development]]
* [http://www.stack.nl/~dimitri/doxygen/ Doxygen] - Source code documentation generator tool.
* [http://www.stack.nl/~dimitri/doxygen/ Doxygen] - Source code documentation generator tool.
* [http://valgrind.org Valgrind] (for Linux) - a free Linux programming tool for memory debugging, memory leak detection, and profiling.
* [http://valgrind.org Valgrind] (for Linux) - a free Linux programming tool for memory debugging, memory leak detection, and profiling.
* [http://www.daimi.au.dk/~sandmann/sysprof/ Sysprof] (for Linux) - a free System-wide Linux Profiler for tracking CPU usage. Sysprof is a sampling CPU profiler for Linux that uses a kernel module to profile the entire system, not just a single application. Sysprof handles shared libraries, and applications do not need to be recompiled. In fact they don't even have to be restarted. Just insert the kernel module and start sysprof.  
* [http://www.daimi.au.dk/~sandmann/sysprof/ Sysprof] (for Linux) - a free System-wide Linux Profiler for tracking CPU usage. Sysprof is a sampling CPU profiler for Linux that uses a kernel module to profile the entire system, not just a single application. Sysprof handles shared libraries, and applications do not need to be recompiled. In fact they don't even have to be restarted. Just insert the kernel module and start sysprof.


=Mentors=
== General guidelines ==
Mentors are developers from [[Team XBMC and Others|Team-XBMC]] and members of [http://sourceforge.net/projects/xbmc The XBMC Project] that have volunteered to assist and mentor non-official XBMC developers in any non-trivial way they can, helping you by checking, commenting and committing your code patches to our SVN source code tree. These mentors have chosen an area they prefer to specialize in, usually this is an area in which they feel they have most interest, knowledge, and expertise in. Initial [[HOW-TO submit a patch|patches are welcome]], and can and will be merged by the team. If you wish to [[Apply to join the Official XBMC Development-Team|join the team in an official capacity]], please let us know.
* Code documentation (DocBook, rst, or [http://www.doxygen.org doxygen] for the code documentation steps, preferably the latter, [http://www.doxygen.org doxygen])
* Self-containment - Kodi should be as little dependent as possible on operating-system and third-party services/daemons/libraries
** Kodi should for example contain all file-system and network-client (like samba) support built-into the XBMC package
* Modular design - independent modules made up by localized/isolated code libraries without dependencies
** Kodi should still compile and run if a non-essential module/library is disabled or removed
* Aim for the GUI/interface to run smoothly on a low spec computer (single core with less than 1Ghz)
** 3D graphic controller (GPU) will always be required hardware for Kodi so try to utilize the GPU as much as possible
* Avoid hard-disk trashing (excess read/write/erase cycles), so no hard-drive paging, (utilize RAM memory instead).
** End-users will be running Kodi and the operating-system on solid-State memory as a [http://en.wikipedia.org/wiki/LiveDistro Live CD (LiveDistro)] of a USB-key
* Fast load and boot times for end-user perception (other things can still run/start in the background without the user knowledge)
** 15-seconds or less from when the end user press the power-button on the computer till he/she can browse the GUI


==Port mentors and developers (Linux, Mac OS X and Windows)==
== Code guidelines and formatting conventions ==
If you are a C/C++ programmer expert, porting specialist or guru and like to volunteer as a ''''third-party'''' mentor and/or developer then please let us know.
[[Official:Code_guidelines_and_formatting_conventions|Official: Code guidelines and formatting conventions]]


==Linux Mentors (also lead developers)==
== User-friendliness is next to godliness ==
* [[User:Yuvalt|Yuvalt]]: Everything Linux
{{#lst:XBMC manifesto|User-friendliness}}
* [[User:Vulkanr|Vulkanr]]: Everything Linux
* [[User:Jmarshall|JMarshall]]: Anything GUI related, Music Library, Video Library, PAPlayer, etc.
* [[User:D4rk|D4rk]]: OpenGL, other Linux stuff
* [[User:Elupus|Elupus]]: DllLoader, Mplayer and DVDPlayer
* [[User:Spiff|Spiff]]: Anything other than DllLoader/MPlayer/DVDPlayer internals.
* [[User:monkeyman 67156|monkeyman 67156]]: Everything Linux
* [[User:Topfs2|Topfs2]]: Everything Linux
* [[User:malloc|malloc]]: Everything Linux
 
==Mac OS X Mentors (also lead developers)==
* [[User:Davilla|Davilla]]: Everything Mac OS X
* [[User:D4rk|D4rk]]: OpenGL, other Mac OS X and Linux stuff
* [[User:malloc|malloc]]: Everything Mac OS X and Linux
* [[User:Vulkanr|Vulkanr]]: Everything Mac OS X and Linux
 
==Windows Mentors==
* [[User:WiSo|WiSo]]: Everything Win32 (SDL, not DirectX)
* [[User:Chadoe|Chadoe (a.k.a. Charly)]] - Everything Win32 (SDL, not DirectX)
* [[User:Jmarshall|JMarshall]]: Anything GUI related, Music Library, Video Library, PAPlayer, etc.
 
=Contact methods=
These are developers forums for XBMC development, (programmers/coders only!).<br />
Respect, these are not for posting feature-requests or end-user support requests!
* IRC: [irc://irc.freenode.net/xbmc-linux #xbmc-linux on freenode] official [http://freenode.net IRC network channel] for the XBMC Linux port project
** (You may also sometimes find developers hanging out at [irc://irc.freenode.net/xbmc #xbmc on freenode])
* IRC: [irc://irc.freenode.net/xbmc-osx #xbmc-osx on freenode] official [http://freenode.net IRC network channel] for the XBMC Mac OS X port
* [http://forum.xbmc.org/forumdisplay.php?f=41 XBMC for Linux port Community-Forum for developers only]
** [http://forum.xbmc.org/forumdisplay.php?f=52 XBMC for Linux port Community-Forum for end-users (unmoderated so far)]
* [http://forum.xbmc.org/forumdisplay.php?f=57 XBMC for Mac OS X port Community-Forum for developers only]
** [http://forum.xbmc.org/forumdisplay.php?f=56 XBMC for Mac OS X port Community-Forum for end-users (unmoderated so far)]
* [http://forum.xbmc.org/forumdisplay.php?f=58 XBMC for Windows port Community-Forum for developers only]
** [http://forum.xbmc.org/forumdisplay.php?f=59 XBMC for Windows port Community-Forum for end-users (unmoderated so far)]


== Contact methods ==
* IRC: [irc://irc.freenode.net/kodi-dev #kodi-dev on freenode] official [http://freenode.net IRC network channel] focused on Kodi development
* [http://forum.kodi.tv/forumdisplay.php?fid=93 Kodi Development Community Forum]
* [[HOW-TO submit a patch]] (where and how to submit source code)
* [[HOW-TO submit a patch]] (where and how to submit source code)


 
[[Category:Development|*]]
=References=
[[Category:Skin development]]
[[Development Notes]]
[[Category:Manual]]
 
[[Category:Development]]
[[Category:Skin Development]]
[[Category:Linux]]
[[Category:XBMC Live]]
[[Category:Mac OS X]]
[[Category:To-Do]]
[[Category:Google Summer of Code]]

Revision as of 13:39, 17 July 2017

Template:XBMC development nav

Home icon grey.png   ▶ Development


Topics

Kodi development
Specific topics
Skinning
Add-ons

Source code

Development Tools

  • Doxygen - Source code documentation generator tool.

People who can help you with specific development areas of Kodi

Development advisors


Other tools and resources

Though any other tools or resources are not required they can possibly help in development.

  • Eclipse CDT Setup For XBMC Development
  • Doxygen - Source code documentation generator tool.
  • Valgrind (for Linux) - a free Linux programming tool for memory debugging, memory leak detection, and profiling.
  • Sysprof (for Linux) - a free System-wide Linux Profiler for tracking CPU usage. Sysprof is a sampling CPU profiler for Linux that uses a kernel module to profile the entire system, not just a single application. Sysprof handles shared libraries, and applications do not need to be recompiled. In fact they don't even have to be restarted. Just insert the kernel module and start sysprof.

General guidelines

  • Code documentation (DocBook, rst, or doxygen for the code documentation steps, preferably the latter, doxygen)
  • Self-containment - Kodi should be as little dependent as possible on operating-system and third-party services/daemons/libraries
    • Kodi should for example contain all file-system and network-client (like samba) support built-into the XBMC package
  • Modular design - independent modules made up by localized/isolated code libraries without dependencies
    • Kodi should still compile and run if a non-essential module/library is disabled or removed
  • Aim for the GUI/interface to run smoothly on a low spec computer (single core with less than 1Ghz)
    • 3D graphic controller (GPU) will always be required hardware for Kodi so try to utilize the GPU as much as possible
  • Avoid hard-disk trashing (excess read/write/erase cycles), so no hard-drive paging, (utilize RAM memory instead).
    • End-users will be running Kodi and the operating-system on solid-State memory as a Live CD (LiveDistro) of a USB-key
  • Fast load and boot times for end-user perception (other things can still run/start in the background without the user knowledge)
    • 15-seconds or less from when the end user press the power-button on the computer till he/she can browse the GUI

Code guidelines and formatting conventions

Official: Code guidelines and formatting conventions

User-friendliness is next to godliness

XBMC manifesto

Contact methods