You can edit almost every page by Creating an account and confirming your email.

KDE Frameworks

From EverybodyWiki Bios & Wiki


KDE Frameworks
Original author(s)KDE
Developer(s)KDE
Initial release1 July 2014; 11 years ago (2014-07-01)
Written inC++ (Qt)
Engine
    Operating systemCross-platform (including "partial" support for Android,[1][2] Windows,[3] macOS and Haiku)
    Type
    LicenseGNU Lesser General Public License (LGPL)[4]

    Search KDE Frameworks on Amazon.

    KDE Frameworks is a collection of libraries and software frameworks readily available to any Qt-based software stacks or applications on multiple operating systems.[5] Featuring frequently needed functionality solutions like hardware integration, file format support, additional graphical control elements, plotting functions, spell checking the collection serves as technological foundation for KDE Plasma 5 and KDE Applications distributed under the GNU Lesser General Public License (LGPL).[6]

    Overview

    Current KDE Frameworks are based on Qt 5, which enables a more widespread use of QML, a simpler JavaScript-based declarative programming language, for the design of user interfaces. The graphics rendering engine used by QML allows for more fluid user interfaces across different devices.[7]

    Some source code was moved from being part of KDE Frameworks 5 to being part of Qt 5.2 and later.

    Since the split of the KDE Software Compilation into KDE Frameworks 5, KDE Plasma 5 and KDE Applications, each sub-project can pick its own development pace. KDE Frameworks are released on a monthly basis[8] and use git.[9][10]

    It should be possible to install KDE Frameworks alongside the KDE Platform 4 so apps can use either one.[11]

    API and ABI stability

    Platform releases are those which begin a series (version number X.0). Only these major releases are allowed to break binary compatibility with the predecessor. Releases in the minor series (X.1, X.2, ...) will guarantee binary portability (API & ABI). This means, for instance, that software that was developed for KDE 3.0 will work on all (future) KDE 3 releases; however, an application developed for KDE 2 is not guaranteed to be able to make use of the KDE 3 libraries. KDE major version numbers mainly follow the Qt release cycle, meaning that KDE SC 4 is based on Qt 4, while KDE 3 was based on Qt 3.

    Supported operating systems

    The repository of each framework should contain a file named metainfo.yaml.[12] This file documents the maintainer of the framework, the type, the supported operating system and other information. The currently supported platforms are Linux, Microsoft Windows, macOS and Android.

    Software architecture

    Structure

    The Frameworks have a clear dependency structure, divided into "categories" and "tiers". The "categories" refer to runtime dependencies:

    • Functional elements have no runtime dependencies.
    • Integration designates code that may require runtime dependencies for integration depending on what the OS or platform offers.
    • Solutions have mandatory runtime dependencies.

    The "Tiers" refer to compile-time dependencies on other Frameworks.

    • Tier 1 Frameworks have no dependencies within Frameworks and only need Qt and other relevant libraries.
    • Tier 2 Frameworks can depend only on Tier 1.
    • Tier 3 Frameworks can depend on other Tier 3 Frameworks as well as Tier 2 and Tier 1.

    Components

    The KDE Frameworks bundle consists of over 70 packages. These existed as a single large package, called kdelibs, in KDE SC 4. Kdelibs was split into several individual frameworks, some of which are no longer part of KDE but were integrated into Qt 5.2.[13]

    KDE Frameworks are grouped in four different tiers according to dependency on other libraries. Tier 1 frameworks only depend on Qt or other system libraries. Tier 2 frameworks can depend on tier 1 libraries, Qt and/or other system libraries and so forth.[14]

    Kirigami

    Kirigami is a QML application framework[16] developed by Marco Martin[17] that enables developers to write applications that run natively on Android, iOS, Windows, Plasma Mobile and any classic Linux desktop environment without code adjustments.

    It is used by various applications, for example Linus Torvalds and Dirk Hohndels scuba diving application Subsurface, the messenger client Banji,[18] the Kaidan messenger,[19] Vvave music player and the KDE software center Discover.

    Software packages

    Linux distribution use some package management system to package the software they distribute. Debian for example distributes KGlobalAccel under the package name libkf5globalaccel,[20] while Fedora distributes it under the name kf5-kglobalaccel.[21]

    Bindings

    While being mainly written in C++, there are many bindings for other programming languages available:[22][23]

    • Python
    • Ruby (Korundum, built on top of QtRuby)
    • Perl
    • C# (however, the current framework for binding to C# and other .NET languages has been deprecated, and the replacement only compiles on Windows).[24]

    These and other bindings use the following technologies:

    Many bindings weren't updated to Qt5 and KF5 or only later in the release cycle.

    Release history

    The 5.0 release was preceded by a technology preview, two alpha releases, and three beta releases.[25][26][27]

    Frameworks 5 releases
    Version Date Notes
    Old version, no longer supported: 5.0 7 July 2014[28] Initial release, requires Qt 5.2.
    Legend:
    Old version
    Older version, still supported
    Latest version
    Latest preview version
    Future release
    Old version, no longer supported: 5.1 7 August 2014[29]
    Old version, no longer supported: 5.2 12 September 2014[30]
    Old version, no longer supported: 5.3 7 October 2014[31]
    Old version, no longer supported: 5.4 6 November 2014[32]
    Old version, no longer supported: 5.5 11 December 2014[33]
    Old version, no longer supported: 5.6 8 January 2015[34] New frameworks: KPackage and NetworkManagerQt
    Old version, no longer supported: 5.7 14 February 2015[35]
    Old version, no longer supported: 5.8 13 March 2015[36] New frameworks: KPeople and KXmlRpcClient
    Old version, no longer supported: 5.9 10 April 2015[37] New framework: ModemManagerQt
    Old version, no longer supported: 5.10 8 May 2015[38]
    Old version, no longer supported: 5.11 12 June 2015[39] New framework: BlueZ-Qt (cf. BlueZ)
    Old version, no longer supported: 5.12 10 July 2015[40]
    Old version, no longer supported: 5.13 12 August 2015[41] New frameworks: Baloo (replaces NEPOMUK) and KFileMetaData, now requires Qt 5.3.
    Old version, no longer supported: 5.14 11 September 2015[42]
    Old version, no longer supported: 5.15 10 October 2015[43]
    Old version, no longer supported: 5.16 13 November 2015[44]
    Old version, no longer supported: 5.17 12 December 2015[45]
    Old version, no longer supported: 5.18 9 January 2016[46]
    Old version, no longer supported: 5.19 13 February 2016[47]
    Old version, no longer supported: 5.20 13 March 2016[48]
    Old version, no longer supported: 5.21 9 April 2016[49] New framework: KActivities-stats, now requires Qt 5.4.
    Old version, no longer supported: 5.22 15 May 2016[50] New framework: KWayland
    Old version, no longer supported: 5.23 13 June 2016[51]
    Old version, no longer supported: 5.24 9 July 2016[52]
    Old version, no longer supported: 5.25 13 August 2016[53] Now requires Qt 5.5 or above.
    Old version, no longer supported: 5.26 10 September 2016[54]
    Old version, no longer supported: 5.27 8 October 2016[55]
    Old version, no longer supported: 5.28 15 November 2016[56] New framework: KSyntaxHighlighting[57]
    Old version, no longer supported: 5.29 12 December 2016[58] New framework: Prison
    Old version, no longer supported: 5.30 14 January 2017[59] Add KNewStuff support for KPackage
    Old version, no longer supported: 5.31 11 February 2017[60] Many modules now have Python bindings, now requires Qt 5.6 or above
    Old version, no longer supported: 5.32 11 March 2017[61]
    Old version, no longer supported: 5.33 8 April 2017[62]
    Old version, no longer supported: 5.34 13 May 2017[63]
    Old version, no longer supported: 5.35 1 June 2017[64]
    Old version, no longer supported: 5.36 8 July 2017[65]
    Old version, no longer supported: 5.37 13 August 2017[66] New framework: Kirigami, now requires Qt 5.7 or above
    Old version, no longer supported: 5.38 9 September 2017[67]
    Old version, no longer supported: 5.39 14 October 2017[68]
    Old version, no longer supported: 5.40 11 November 2017[69]
    Old version, no longer supported: 5.41 10 December 2017[70]
    Old version, no longer supported: 5.42 13 January 2018[71]
    Old version, no longer supported: 5.43 12 February 2018[72] New frameworks: KHolidays and Purpose
    Old version, no longer supported: 5.44 10 March 2018[73]
    Old version, no longer supported: 5.45 14 April 2018[74] requires Qt 5.8 or above
    Old version, no longer supported: 5.46 12 May 2018[75]
    Old version, no longer supported: 5.47 9 June 2018[76]
    Old version, no longer supported: 5.48 15 July 2018[77]
    Old version, no longer supported: 5.49 11 August 2018[78]
    Old version, no longer supported: 5.50 8 September 2018[79] New framework: Syndication
    Old version, no longer supported: 5.51 15 October 2018[80]
    Old version, no longer supported: 5.52 10 November 2018[81]
    Old version, no longer supported: 5.53 9 December 2018[82] requires Qt 5.9 or above
    Old version, no longer supported: 5.54 12 January 2019[83]
    Old version, no longer supported: 5.55 9 February 2019[84] requires Qt 5.10 or above
    Old version, no longer supported: 5.56 9 March 2019[85]
    Old version, no longer supported: 5.57 13 April 2019[86]
    Old version, no longer supported: 5.58 13 May 2019[87]
    Old version, no longer supported: 5.59 8 June 2019[88]
    Old version, no longer supported: 5.60 13 July 2019[89] requires Qt 5.11 or above
    Old version, no longer supported: 5.61 10 August 2019[90]
    Old version, no longer supported: 5.62 14 September 2019[91]
    Old version, no longer supported: 5.63 12 October 2019[92] Added KCalendarCore and KContacts
    Old version, no longer supported: 5.64 10 November 2019[93]
    Old version, no longer supported: 5.65 14 December 2019[94] Added KQuickCharts
    Old version, no longer supported: 5.66 11 January 2020[95]
    Old version, no longer supported: 5.67 8 February 2020[96]
    Old version, no longer supported: 5.68 15 March 2020[97]
    Old version, no longer supported: 5.69 5 April 2020[98]
    Old version, no longer supported: 5.70 9 May 2020[99]
    Old version, no longer supported: 5.71 13 June 2020[100]
    Old version, no longer supported: 5.72 11 July 2020[101]
    Old version, no longer supported: 5.73 8 August 2020[102]
    Old version, no longer supported: 5.74 12 September 2020[103]
    Old version, no longer supported: 5.75 10 October 2020[104]
    Old version, no longer supported: 5.76 7 November 2020[105]
    Old version, no longer supported: 5.77 12 December 2020[106]
    Old version, no longer supported: 5.78 9 January 2021[107]
    Old version, no longer supported: 5.79 12 February 2021[108]
    Old version, no longer supported: 5.80 13 March 2021[109]
    Old version, no longer supported: 5.81 10 April 2021[110]
    Old version, no longer supported: 5.82 8 May 2021[111]
    Old version, no longer supported: 5.83 12 June 2021[112]
    Current stable version: 5.84 10 July 2021[113]
    Future release: 5.85[114]

    History

    The source code of KDE Frameworks has been around since KDElibs 1. The first release as KDE Frameworks was with version 5, to account for the fact that the code base was that of KDE Platform version 4 (the only major version of KDE Platform).

    The transition from KDE Platform to KDE Frameworks began in August 2013, guided by top KDE technical contributors.[7]

    After the initial release of KDE Frameworks 5.0, the developers focused on adding new features to the components in KDE Frameworks 5,[115] an example being better integration of Firefox into KDE.[116]

    The major improvement of Frameworks 5 is its modularization. In earlier KDE versions, the libraries were bundled as a single large package. In Frameworks, the libraries were split into individual smaller packages. This facilitates utilization of the libraries by other Qt-based software, since dependencies can be kept at a minimum.[7]

    While KDE 4 was based on version 4 of the Qt widget toolkit, Frameworks 5 is based on version 5.

    KDE4 transformation

    During KDE SC 4, the then so called KDE Platform consisted of all libraries and services needed for KDE Plasma and the applications. Starting with Qt 5, this platform was transformed into a set of modules that is now referred to as KDE Frameworks. These modules include: Solid, Nepomuk, Phonon, etc. and are licensed either under the LGPL, BSD license, MIT License or X11 license.[117]

    Adoption

    Besides the KDE Software Compilation, there are other adopters such as the desktop environments LXQt, MoonLightDE or Hawaii.

    Version 3.0 of Krita, the raster graphics editor of the Calligra Suite, which was released on May 31, 2016, depends on KDE Frameworks 5 and Qt 5.2.

    With Kirigami, there is also increased usage by applications such as Amarok, Avogadro, Trojitá or Subsurface.

    References

    1. "Release of KDE Frameworks 5.24.0". 9 July 2016.
    2. "Android - KDE Community Wiki".
    3. https://api.kde.org/
    4. "First release of KDE Frameworks 5". 2014-07-07.
    5. "The KDE Frameworks". API Documentation.
    6. "KDE Frameworks". Tech Base.
    7. 7.0 7.1 7.2 Howard Chan (2013-09-04). "KDE Release Structure Evolves". KDE. Retrieved 2014-02-27.
    8. "Release schedule for KDE Frameworks 5".
    9. "Git workflow for Frameworks".
    10. "KDE Frameworks5 API documentation". Archived from the original on 2014-08-22. Unknown parameter |url-status= ignored (help)
    11. "Coinstallability with KDE Platform 4".
    12. "metainfo.yaml of KConfig".[permanent dead link]
    13. Jos Poortvliet (2013-12-17). "Qt 5.2 - Foundation for KDE Frameworks 5". Dot.kde.org. Retrieved 2014-03-10.
    14. Howard Chan (2013-09-25). "Frameworks 5". Dot.kde.org. Retrieved 2014-03-10.
    15. "KWindowSystem in Frameworks 5". 6 February 2014.
    16. "KDE Kirigami". KDE. Retrieved November 25, 2018.
    17. "Contributors to KDE/Kirigami".
    18. https://youtube.com/watch?v=LjyKtusCy2Y
    19. https://github.com/KaidanIM/Kaidan
    20. "KGlobalAccel in Debian".
    21. "KGlobalAccel in Fedora".[permanent dead link]
    22. "The KDE development platform". Retrieved 2010-11-26.
    23. Development/Languages - KDE TechBase. Techbase.kde.org (2012-07-12). Retrieved on 2013-07-17.
    24. "Qyoto". Retrieved 2015-01-18.
    25. "Frameworks 5 Technology Preview". KDE. 2014-01-07.
    26. "KDE Ships First Alpha of Frameworks 5". KDE. 2014-02-14.
    27. "KDE Ships Second Alpha of Frameworks 5". KDE. 2014-03-03.
    28. "First release of KDE Frameworks 5". KDE. 2014-07-07. Retrieved 2017-12-31.
    29. "Second release of KDE Frameworks 5". KDE. 2014-08-07. Retrieved 2017-12-31.
    30. "Release of KDE Frameworks 5.2.0". KDE. 12 September 2014. Retrieved 5 March 2015.
    31. "Release of KDE Frameworks 5.3.0". KDE. 7 October 2014. Retrieved 5 March 2014.
    32. "Release of KDE Frameworks 5.4.0". KDE. 6 November 2014. Retrieved 5 March 2015.
    33. "Release of KDE Frameworks 5.5.0". KDE. 11 December 2014. Retrieved 5 March 2015.
    34. "Release of KDE Frameworks 5.6.0". KDE. 8 January 2015. Retrieved 5 March 2015.
    35. "Release of KDE Frameworks 5.7.0". KDE. 14 February 2015. Retrieved 5 March 2015.
    36. "Release of KDE Frameworks 5.8.0". KDE. 13 March 2015. Retrieved 13 March 2015.
    37. "Release of KDE Frameworks 5.9.0". KDE. 10 April 2015. Retrieved 30 April 2015.
    38. "Release of KDE Frameworks 5.10.0". KDE. 8 May 2015. Retrieved 9 May 2015.
    39. "Release of KDE Frameworks 5.11.0". KDE. Retrieved 29 June 2015.
    40. "Release of KDE Frameworks 5.12.0". KDE. Retrieved 10 July 2015.
    41. "Release of KDE Frameworks 5.13.0". KDE. 2015-08-12. Retrieved 2015-08-12.
    42. "Release of KDE Frameworks 5.14.0". KDE. 2015-09-12. Retrieved 2015-09-12.
    43. "Release of KDE Frameworks 5.15.0". KDE. 2015-10-10.
    44. "Release of KDE Frameworks 5.16.0". KDE. 2015-11-13.
    45. "Release of KDE Frameworks 5.17.0". KDE. 2015-12-12.
    46. "Release of KDE Frameworks 5.18.0". KDE. 2016-01-09.
    47. "Release of KDE Frameworks 5.19.0". KDE. 2016-02-13.
    48. "Release of KDE Frameworks 5.20.0". KDE. 2016-03-13. Retrieved 2017-12-31.
    49. "Release of KDE Frameworks 5.21.0". KDE. 2016-04-09. Retrieved 2016-04-09.
    50. "Release of KDE Frameworks 5.22.0". KDE. 2016-05-15. Retrieved 2016-05-15.
    51. "Release of KDE Frameworks 5.23.0". KDE. 2016-06-13. Retrieved 2016-06-14.
    52. "Release of KDE Frameworks 5.24.0". KDE. 2016-07-09. Retrieved 2016-07-10.
    53. "Release of KDE Frameworks 5.25.0". KDE. 2016-08-13. Retrieved 2016-08-21.
    54. "Release of KDE Frameworks 5.26.0". KDE. 2016-09-10. Retrieved 2016-10-08.
    55. "Release of KDE Frameworks 5.27.0". KDE. 2016-10-08. Retrieved 2016-10-08.
    56. "Release of KDE Frameworks 5.28.0". KDE. 2016-11-15. Retrieved 2016-11-15.
    57. "KSyntaxHighlighing: A new Syntax Highlighting Framework". KDE. 2016-11-15. Retrieved 2016-11-21.
    58. "Release of KDE Frameworks 5.29.0". KDE. 2016-12-12. Retrieved 2016-12-13.
    59. "Release of KDE Frameworks 5.30.0". KDE. 2017-01-14. Retrieved 2017-01-27.
    60. "Release of KDE Frameworks 5.31.0". KDE. 2017-02-11. Retrieved 2017-02-19.
    61. "Release of KDE Frameworks 5.32.0". KDE. 2017-03-11. Retrieved 2017-03-11.
    62. "Release of KDE Frameworks 5.33.0". KDE. 2017-04-08. Retrieved 2017-04-08.
    63. "Release of KDE Frameworks 5.34.0". KDE. 2017-05-13. Retrieved 2017-05-13.
    64. "Release of KDE Frameworks 5.35.0". KDE. 2017-06-10. Retrieved 2017-06-10.
    65. "Release of KDE Frameworks 5.36.0". KDE. 2017-07-08. Retrieved 2017-07-08.
    66. "Release of KDE Frameworks 5.37.0". KDE. 2017-08-13. Retrieved 2017-09-09.
    67. "Release of KDE Frameworks 5.38.0". KDE. 2017-09-09. Retrieved 2017-09-09.
    68. "Release of KDE Frameworks 5.39.0". KDE. 2017-10-14. Retrieved 2017-12-31.
    69. "Release of KDE Frameworks 5.40.0". KDE. 2017-11-11. Retrieved 2017-12-31.
    70. "Release of KDE Frameworks 5.41.0". KDE. 2017-12-10. Retrieved 2017-12-31.
    71. "Release of KDE Frameworks 5.42.0". KDE. 2018-01-13. Retrieved 2018-01-15.
    72. "Release of KDE Frameworks 5.43.0". KDE. 2018-02-12. Retrieved 2018-02-12.
    73. "Release of KDE Frameworks 5.44.0". KDE. 2018-03-10. Retrieved 2018-04-14.
    74. "Release of KDE Frameworks 5.45.0". KDE. 2018-04-14. Retrieved 2018-04-14.
    75. "Release of KDE Frameworks 5.46.0". KDE. 2018-05-12. Retrieved 2018-05-12.
    76. "Release of KDE Frameworks 5.47.0". KDE. 2018-06-09. Retrieved 2018-06-09.
    77. "Release of KDE Frameworks 5.48.0". KDE. 2018-07-15. Retrieved 2018-08-15.
    78. "Release of KDE Frameworks 5.49.0". KDE. 2018-08-11. Retrieved 2018-08-15.
    79. "Release of KDE Frameworks 5.50.0". KDE. 2018-09-08. Retrieved 2018-09-08.
    80. "Release of KDE Frameworks 5.51.0". KDE. 2018-10-15. Retrieved 2019-01-29.
    81. "Release of KDE Frameworks 5.52.0". KDE. 2018-11-10. Retrieved 2019-01-29.
    82. "Release of KDE Frameworks 5.53.0". KDE. 2018-12-09. Retrieved 2019-01-29.
    83. "Release of KDE Frameworks 5.54.0". KDE. 2019-01-12. Retrieved 2019-01-29.
    84. "Release of KDE Frameworks 5.55.0". KDE. 2019-02-09. Retrieved 2019-02-09.
    85. "Release of KDE Frameworks 5.56.0". KDE. 2019-03-09. Retrieved 2019-09-04.
    86. "Release of KDE Frameworks 5.57.0". KDE. 2019-04-13. Retrieved 2019-04-18.
    87. "Release of KDE Frameworks 5.58.0". KDE. 2019-05-13. Retrieved 2019-09-04.
    88. "Release of KDE Frameworks 5.59.0". KDE. 2019-06-08. Retrieved 2019-09-04.
    89. "Release of KDE Frameworks 5.60.0". KDE. 2019-07-13. Retrieved 2019-09-04.
    90. "Release of KDE Frameworks 5.61.0". KDE. 2019-08-10. Retrieved 2019-09-04.
    91. "Release of KDE Frameworks 5.62.0". KDE. 2019-09-14. Retrieved 2019-10-12.
    92. "Release of KDE Frameworks 5.63.0". KDE. 2019-10-12. Retrieved 2019-10-12.
    93. "Release of KDE Frameworks 5.64.0". KDE. 2019-11-10. Retrieved 2019-12-14.
    94. "Release of KDE Frameworks 5.65.0". KDE. 2019-12-14. Retrieved 2019-12-14.
    95. "Release of KDE Frameworks 5.66.0". KDE. 2020-01-11. Retrieved 2020-01-11.
    96. "Release of KDE Frameworks 5.67.0". KDE. 2020-02-02. Retrieved 2020-02-09.
    97. "Release of KDE Frameworks 5.68.0". KDE. 2020-03-15. Retrieved 2020-03-16.
    98. "Release of KDE Frameworks 5.69.0". KDE. Retrieved 2020-05-06.
    99. "Release of KDE Frameworks 5.70.0". KDE. Retrieved 2020-05-09.
    100. "Release of KDE Frameworks 5.71.0". KDE. Retrieved 2020-06-13.
    101. "Release of KDE Frameworks 5.72.0". KDE. Retrieved 2020-07-14.
    102. "Release of KDE Frameworks 5.73.0". KDE. Retrieved 2020-08-09.
    103. "Release of KDE Frameworks 5.74.0". KDE. Retrieved 2020-09-12.
    104. "Release of KDE Frameworks 5.75.0". KDE. Retrieved 2020-10-12.
    105. "Release of KDE Frameworks 5.76.0". KDE. Retrieved 2020-11-14.
    106. "Release of KDE Frameworks 5.77.0". KDE. Retrieved 2020-12-12.
    107. "KDE Ships Frameworks 5.78.0". KDE. Retrieved 2021-01-09.
    108. "KDE Ships Frameworks 5.79.0". KDE. Retrieved 2021-02-15.
    109. "KDE Ships Frameworks 5.80.0". KDE. Retrieved 2021-03-14.
    110. "KDE Ships Frameworks 5.81.0". KDE. Retrieved 2021-04-10.
    111. "KDE Ships Frameworks 5.82.0". KDE. Retrieved 2021-05-08.
    112. "KDE Ships Frameworks 5.83.0". KDE. Retrieved 2021-06-12.
    113. "KDE Ships Frameworks 5.84.0". KDE. Retrieved 2021-07-10.
    114. "Schedules/Frameworks". KDE. Retrieved 2021-07-10.
    115. "KF5 Update Meeting Minutes 2014-w28". 2014-07-08.
    116. "Firefox + KDE integration: Getting FF to use Dolphin reliably". 2014-07-03. Archived from the original on 2018-05-15. Retrieved 2021-08-10.
    117. "KDE Licensing Policy". Retrieved 2010-11-06.

    External links


    This article "KDE Frameworks" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:KDE Frameworks. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.

    Page kept on Wikipedia This page exists already on Wikipedia.