Friday, December 4, 2015

Linux kernel

The Linux kernel is a Unix-like computer operating system kernel. It is used world-wide: the Linux operating system is based on it and deployed on both traditional computer systems such as personal computers and servers, usually in the form of Linux distributions,[9] and on various embedded devices such as routers and NAS appliances. The Android operating system for tablet computers, smartphones and smartwatches is also based atop the Linux kernel.
The Linux kernel was initially conceived and created in 1991 by Finnish computer science student Linus Torvalds,[10] for his personal computer and with no cross-platform intentions, but has since expanded to support a huge array of computer architectures, many more than other operating systems or kernels. Linux rapidly attracted developers and users who adapted code from other free software projects for use with the new operating system.[11] The Linux kernel has received contributions from nearly 12,000 programmers from more than 1,200 companies, including some of the largest software and hardware vendors.[12][13]
The Linux kernel API, the application programming interface (API) through which user programs interact with the kernel, is meant to be very stable and to not break userspace programs (some programs, such as those with GUIs, rely on other APIs as well). As part of the kernel's functionality, device drivers control the hardware; "mainlined" device drivers are also meant to be very stable. However, the interface between the kernel and loadable kernel modules (LKMs), unlike in many other kernels and operating systems, is not meant to be very stable by design.
The Linux kernel, developed by contributors worldwide, is a prominent example of free and open source software.[14] Day-to-day development discussions take place on the Linux kernel mailing list (LKML). The Linux kernel is released under the GNU General Public License version 2 (GPLv2),[15][6] with some firmware images released under various non-free licenses.[8]

Wednesday, December 2, 2015

Rooting (Android OS)

Rooting is the process of allowing users of smartphones, tablets and other devices running the Android mobile operating system to attain privileged control (known as root access) over various Android subsystems. As Android uses the Linux kernel, rooting an Android device gives similar access to administrative (superuser) permissions as on Linux or any other Unix-like operating system such as FreeBSD or OS X.
Rooting is often performed with the goal of overcoming limitations that carriers and hardware manufacturers put on some devices. Thus, rooting gives the ability (or permission) to alter or replace system applications and settings, run specialized applications ("apps") that require administrator-level permissions, or perform other operations that are otherwise inaccessible to a normal Android user. On Android, rooting can also facilitate the complete removal and replacement of the device's operating system, usually with a more recent release of its current operating system.
Root access is sometimes compared to jailbreaking devices running the Apple iOS operating system. However, these are different concepts: Jailbreaking is the bypass of several types of Apple prohibitions for the end user, including modifying the operating system (enforced by a "locked bootloader"), installing non-officially approved applications via sideloading, and granting the user elevated administration-level privileges (rooting). Only a minority of Android devices lock their bootloaders, and many vendors such as HTC, Sony, Asus and Google explicitly provide the ability to unlock devices, and even replace the operating system entirely.[1][2][3] Similarly, the ability to sideload applications is typically permissible on Android devices without root permissions. Thus, it is primarily the third aspect of iOS jailbreaking (giving users administrative privileges) that most directly correlates to Android rooting.

Google Play services 8.3 available now!

Android Licensing

The source code for Android is open-source: it is developed in private by Google, with the source code released publicly when a new version of Android is released. Google publishes most of the code (including network and telephony stacks) under the non-copyleft Apache License version 2.0. which allows modification and redistribution.[185][186] The license does not grant rights to the "Android" trademark, so device manufacturers and wireless carriers have to license it from Google under individual contracts. Associated Linux kernel changes are released under the copyleft GNU General Public License version 2, developed by the Open Handset Alliance, with the source code publicly available at all times. Typically, Google collaborates with a hardware manufacturer to produce a flagship device (part of the Nexus series) featuring the new version of Android, then makes the source code available after that device has been released.[187] The only Android release which was not immediately made available as source code was the tablet-only 3.0 Honeycomb release. The reason, according to Andy Rubin in an official Android blog post, was because Honeycomb was rushed for production of the Motorola Xoom,[188] and they did not want third parties creating a "really bad user experience" by attempting to put onto smartphones a version of Android intended for tablets.[189]
Only the base Android operating system (including some applications) is open-source software, whereas most Android devices ship with a substantial amount of proprietary software, such as Google Mobile Services, which includes applications such as Google Play Store, Google Search, and Google Play Services – a software layer that provides APIs for the integration with Google-provided services, among others. These applications must be licensed from Google by device makers, and can only be shipped on devices which meet its compatibility guidelines and other requirements.[65][108] Custom, certified distributions of Android produced by manufacturers (such as TouchWiz and HTC Sense) may also replace certain stock Android apps with their own proprietary variants and add additional software not included in the stock Android operating system.[3] There may also be "binary blob" drivers required for certain hardware components in the device.[3][99]
Some stock applications in AOSP code that were formerly used by earlier versions of Android, such as Search, Music and Calendar, have been abandoned by Google in favor of non-free replacements distributed through Play Store (Google Search, Google Play Music, and Google Calendar) that are no longer open-source. Moreover, open-source variants of some applications also exclude functions that are present in their non-free versions, such as Photosphere panoramas in Camera, and a Google Now page on the default home screen (exclusive to the proprietary version "Google Now Launcher", whose code is embedded within that of the main Google application).[3][190][191][192]
Richard Stallman and the Free Software Foundation have been critical of Android and have recommended the usage of alternatives such as Replicant, because drivers and firmware vital for the proper functioning of Android devices are usually proprietary, and because the Google Play Store application can forcibly install or deinstall applications and, as a result, invite non-free software.[193][194]

Android Update Schedule

Google provides major incremental upgrades to Android every six to nine months, with confectionery-themed names, which most devices are capable of receiving over the air.[101] The latest major release is Android 6.0 "Marshmallow".
Compared to its primary rival mobile operating system, iOS, Android updates typically reach various devices with significant delays. For devices not under the Nexus brand, updates often arrive months from the time the given version is officially released, if at all.[102] This is partly due to the extensive variation in hardware of Android devices, to which each upgrade must be specifically tailored, as the official Google source code only runs on their flagship Nexus devices. Porting Android to specific hardware is a time- and resource-consuming process for device manufacturers, who prioritize their newest devices and often leave older ones behind.[102] Hence, older smartphones are frequently not updated if the manufacturer decides it is not worth their time, regardless of whether the phone is capable of running the update. This problem is compounded when manufacturers customize Android with their own interface and apps, which must be reapplied to each new release. Additional delays can be introduced by wireless carriers who, after receiving updates from manufacturers, further customize and brand Android to their needs and conduct extensive testing on their networks before sending the upgrade out to users.[102]
The lack of after-sale support from manufacturers and carriers has been widely criticized by consumer groups and the technology media.[103][104] Some commentators have noted that the industry has a financial incentive not to upgrade their devices, as the lack of updates for existing devices fuels the purchase of newer ones,[105] an attitude described as "insulting".[104] The Guardian has complained that the method of distribution for updates is complicated only because manufacturers and carriers have designed it that way.[104] In 2011, Google partnered with a number of industry players to announce an "Android Update Alliance", pledging to deliver timely updates for every device for 18 months after its release;[106] however, there has not been another official word about that alliance since its announcement.[102][107]
In 2012, Google began decoupling certain aspects of the operating system (particularly core applications) so they could be updated through Google Play Store, independently of Android itself. One of these components, Google Play Services, is a closed-source system-level process providing APIs for Google services, installed automatically on nearly all devices running Android version 2.2 and higher. With these changes, Google can add new operating system functionality through Play Services and application updates without having to distribute an upgrade to the operating system itself. As a result, Android 4.2 and 4.3 contained relatively fewer user-facing changes, focusing more on minor changes and platform improvements.[3][108]

Hardware for Android

The main hardware platform for Android is the ARM architecture (ARMv7 and ARMv8-A architectures), with x86 and MIPS architectures also officially supported in later versions of Android. Since Android 5.0 "Lollipop", 64-bit variants of all platforms are supported in addition to the 32-bit variants.[79] Unofficial Android-x86 project used to provide support for the x86 and MIPS architectures ahead of the official support.[5][80] Since 2012, Android devices with Intel processors began to appear, including phones[81] and tablets. While gaining support for 64-bit platforms, Android was first made to run on 64-bit x86 and then on ARM64.
Requirements for the minimum amount of RAM for devices running Android 5.1 range from 512 MB of RAM for normal-density screens, to about 1.8 GB for high-density screens.[82] The recommendation for Android 4.4 is to have at least 512 MB of RAM,[83] while for "low RAM" devices 340 MB is the required minimum amount that does not include memory dedicated to various hardware components such as the baseband processor.[84] Android 4.4 requires a 32-bit ARMv7, MIPS or x86 architecture processor (latter two through unofficial ports),[5][85] together with an OpenGL ES 2.0 compatible graphics processing unit (GPU).[86] Android supports OpenGL ES 1.1, 2.0, 3.0 and 3.1. Some applications may explicitly require a certain version of the OpenGL ES, and suitable GPU hardware is required to run such applications.[86]
Android devices incorporate many optional hardware components, including still or video cameras, GPS, orientation sensors, dedicated gaming controls, accelerometers, gyroscopes, barometers, magnetometers, proximity sensors, pressure sensors, thermometers, and touchscreens. Some hardware components are not required, but became standard in certain classes of devices, such as smartphones, and additional requirements apply if they are present. Some other hardware was initially required, but those requirements have been relaxed or eliminated altogether. For example, as Android was developed initially as a phone OS, hardware such as microphones were required, while over time the phone function became optional.[69] Android used to require an autofocus camera, which was relaxed to a fixed-focus camera[69] if present at all, since the camera was dropped as a requirement entirely when Android started to be used on set-top boxes.
In addition to running on smartphones and tablets, several vendors run Android natively on regular PC hardware with a keyboard and mouse.[87][88][89] In addition to their availability on commercially available hardware, similar PC hardware–friendly versions of Android are freely available from the Android-x86 project, including customized Android 4.4.[90] Using the Android emulator that is part of the Android SDK, or by using BlueStacks or Andy, Android can also run non-natively on x86.[91][92] Chinese companies are building a PC and mobile operating system, based on Android, to "compete directly with Microsoft Windows and Google Android".[93] The Chinese Academy of Engineering noted that "more than a dozen" companies were customising Android following a Chinese ban on the use of Windows 8 on government PCs.[94][95][96]

Android Application

Applications ("apps"), which extend the functionality of devices, are written using the Android software development kit (SDK) and, often, the Java programming language that has complete access to the Android APIs. Java may be combined with C/C++, together with a choice of non-default runtimes that allow better C++ support;[59][60][61] the Go programming language is also supported since its version 1.4, which can also be used exclusively although with a restricted set of Android APIs.[62] The SDK includes a comprehensive set of development tools,[63] including a debugger, software libraries, a handset emulator based on QEMU, documentation, sample code, and tutorials. Initially, Google's supported integrated development environment (IDE) was Eclipse using the Android Development Tools (ADT) plugin; in December 2014, Google released Android Studio, based on IntelliJ IDEA, as its primary IDE for Android application development. Other development tools are available, including a native development kit (NDK) for applications or extensions in C or C++, Google App Inventor, a visual environment for novice programmers, and various cross platform mobile web applications frameworks. In January 2014, Google unveiled an framework based on Apache Cordova for porting Chrome HTML 5 web applications to Android, wrapped in a native application shell.[64]
Android has a growing selection of third-party applications, which can be acquired by users by downloading and installing the application's APK (Android application package) file, or by downloading them using an application store program that allows users to install, update, and remove applications from their devices. Google Play Store is the primary application store installed on Android devices that comply with Google's compatibility requirements and license the Google Mobile Services software.[3][65] Google Play Store allows users to browse, download and update applications published by Google and third-party developers; As of July 2013, there are more than one million applications available for Android in Play Store.[66] As of May 2013, 48 billion applications have been installed from Google Play Store[67] and in July 2013, 50 billion applications were installed.[68][69] Some carriers offer direct carrier billing for Google Play application purchases, where the cost of the application is added to the user's monthly bill.[70]
Due to the open nature of Android, a number of third-party application marketplaces also exist for Android, either to provide a substitute for devices that are not allowed to ship with Google Play Store, provide applications that cannot be offered on Google Play Store due to policy violations, or for other reasons. Examples of these third-party stores have included the Amazon Appstore, GetJar, and SlideMe. F-Droid, another alternative marketplace, seeks to only provide applications that are distributed under free and open source licenses.[3][71][72][73]